solr triefloat和sortableFloatfield,最适合浮点数排序



我有一个solr架构,其中一个字段称为triefloatfield:

    <fieldType name="tfloat" class="solr.TrieFloatField" precisionStep="8" omitNorms="true" positionIncrementGap="0"/>
(...)
    <field
                name="someField"
                type="tfloat"
                indexed="true"
                stored="false"
                multiValued="false" />

如果我用它来对结果进行排序:

solrQuery.addSortField("someField", ORDER.asc);
solrQuery.addSortField("score", ORDER.desc);

浮点数未按正确的数值顺序返回,即:我会得到以下结果,例如:

0.31 0.67 0.80 15.13 0.09 15.13 0.04

甚至陌生的是,当我使用此字段对结果进行排序时,确实会发生某种排序(如果是,如果我根本不使用任何排序字段,则它们的顺序不同)。另外,即使我将排序顺序从ASC更改为DESC,结果也以相同的顺序。

我认为Triefloat类型可以很好地工作。但是,我现在在文档中看到,他们只提到它是"浮点场访问卢克内trierange处理":

http://lucene.apache.org/solr/api-4_0_0-alpha/org/opache/solr/schema/triefloatfield.html

老实说,我真的不知道这意味着什么。我还看到有一个可排序的floatfield:

http://www.jarvana.com/jarvana/view/org/apache/solr/solr/solr/solr/solr-core/3.5.0/solr-core-3.5.0-javadoc.jar!/org/org/org/org/apache/solache/solr/架构/sortablefloatfield.html

但是,文档并没有真正说出用作排序标准时的行为。

我的问题简单的问题是:这两种类型(或其他类型)中的哪一种适用于存储浮点数,因此可以在solr Query Query Query Query

<</p> <</p> <</p>

两个类都应该使用,但是TrieFloatField的内存要比SortableDoubleField少得多(鉴于前者使用浮点场高速缓存,而后者使用字符串字段缓存)。请注意,如果您不需要执行范围查询,则应设置precisionStep=0

但是,您击中的错误非常奇怪...

最新更新