SOLR范围查询的奇怪行为

时间:2012-11-05 12:49:19

标签: solr

我有一个大约有100000个项目的solr索引。 索引的一个字段是一个整数,范围从0到INT_MAX(实际上索引中的最高值是157)。我尝试在这个领域进行范围查询,我得到了非常奇怪的结果:

范围查询:

  • nb_validations:[10 TO *] =>返回40499项
  • nb_validations:[9 TO *] =>返回6项(应至少为40499 ?? !!
  • nb_validations:[8 TO *] =>返回13项

完全匹配查询:

  • nb_validations:10 =>返回2005项
  • nb_validations:9 =>返回6项

我在日志中没有错误,我的solr配置看起来没问题。字段声明为int并被索引和存储。

这有什么问题?我的索引可以被破坏吗?

感谢。

2 个答案:

答案 0 :(得分:4)

您应该使用sint来存储值,并使用该字段进行范围查询。

<field name="age" type="sint" indexed="true" stored="true"/>

如果您将字段类型设置为整数,则Solr仍可能将其视为字符串。

<field name="age" type="integer" indexed="true" stored="true"/>

Documentation: -

  

将“整数”值编码为简单的旧数字字段类型   字符串。除了现有人员外,不应使用此课程   包含索引为字符串的数值的索引。新架构   应该使用TrieIntField。

     

字段值将按数字排序,但范围查询(以及其他   依赖于数字范围的功能将无法按预期工作:   值将以unicode字符串顺序计算,而不是数字顺序。

答案 1 :(得分:-1)

使用&#34; int&#34;类型,范围查询将正常工作。

<field name="my_name" type="int" indexed="true" stored="false"/>

<fieldType name="int" class="solr.TrieIntField" precisionStep="0" positionIncrementGap="0"/>