我有一个 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 类型可以很好地解决这个问题。但是我现在在文档中看到他们只提到它是“浮点字段可访问的 Lucene TrieRange 处理”:
http://lucene.apache.org/solr/api-4_0_0-ALPHA/org/apache/solr/schema/TrieFloatField.html
老实说,我真的不知道那是什么意思。我还看到有一个 SortableFloatField:
但是文档并没有真正说明它在用作排序标准时的行为方式。
我的问题很简单:这两种类型中的哪一种(或其他类型)适合存储浮点数,以便它们可以用于 Solr 查询中的正确(自然)升序和降序排序