我在solr中有一个包含分数值的字段,如1.2,0.523,4.7等。 该字段定义为
<field name="ratio" type="float" stored="true" indexed="true"/>
为了搜索范围从0.2到1,我使用以下查询
http://localhost:8983/solr/collection1/select?q=bag&df=keywords&wt=json&indent=true&group=true&group.field=ratio&fq=ratio:[0.2 TO 1]
但我获得的结果中包含的比率格式为1.查询中的问题在哪里。
注意:我还必须对此字段进行分组,以及为什么我也应用了分组。不要担心
答案 0 :(得分:1)
Solr中的float字段类型在范围查询时有一些奇怪的行为......
字段值将按数字排序,但范围查询(以及其他 依赖于数字范围的功能将无法按预期工作: 值将以unicode字符串顺序计算,而不是数字顺序。
来自:http://lucene.apache.org/solr/4_10_4/solr-core/org/apache/solr/schema/FloatField.html
您想要使用的是等效的Trie field,在这种情况下是Trie float。所以你的领域应该定义如下......
<field name="ratio" type="tfloat" stored="true" indexed="true"/>
确保在更改架构后重新编制索引,然后再次尝试范围查询。
答案 1 :(得分:0)
范围查询在普通原始字段类型(如float)上无法按预期工作,因为对于这些字段,在范围查询期间,lucene按字典顺序而不是数字顺序对文档进行排序,然后对其应用范围。 Trie字段或可排序字段应该可以解决问题。此外,对于solr 5及更高版本,原始类型仅支持trie字段。