4

我有一个包含大约 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 并被索引和存储。

那有什么问题?我的索引会损坏吗?

谢谢。

4

2 回答 2

4

您应该使用sint来存储值并将该字段用于范围查询。

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

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

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

文档:-

将“整数”值编码为简单字符串的传统数字字段类型。除非具有包含索引为字符串的数值的现有索引的人,否则不应使用此类。新模式应使用 TrieIntField。

字段值将按数字排序,但范围查询(和其他依赖数字范围的功能)将无法按预期工作:值将按 unicode 字符串顺序而不是数字顺序进行评估。

于 2012-11-05T13:10:11.467 回答
0

使用“int”类型,范围查询将正常工作。

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

<fieldType name="int" class="solr.TrieIntField" precisionStep="0" positionIncrementGap="0"/>
于 2015-10-12T11:02:17.813 回答