我有一个大约有100000个项目的solr索引。 索引的一个字段是一个整数,范围从0到INT_MAX(实际上索引中的最高值是157)。我尝试在这个领域进行范围查询,我得到了非常奇怪的结果:
范围查询:
完全匹配查询:
我在日志中没有错误,我的solr配置看起来没问题。字段声明为int并被索引和存储。
这有什么问题?我的索引可以被破坏吗?
感谢。
答案 0 :(得分:4)
您应该使用sint
来存储值,并使用该字段进行范围查询。
<field name="age" type="sint" indexed="true" stored="true"/>
如果您将字段类型设置为整数,则Solr仍可能将其视为字符串。
<field name="age" type="integer" indexed="true" stored="true"/>
将“整数”值编码为简单的旧数字字段类型 字符串。除了现有人员外,不应使用此课程 包含索引为字符串的数值的索引。新架构 应该使用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"/>