我在 solr 文档中添加了 2 个字段
weight_value
和 nofyears_1
。
两个字段的架构如下
<field name="weight_value" type="string" indexed="true" stored="true" />
<field name="nofyears_1" type="string" indexed="true" stored="true" />
两者都存储为
string
,因为它存储数值。
这里的问题是范围查询在
weight_value
字段上完美工作,但在 nofyears_1
字段上不起作用。
像这样
weight_value:[40 TO 50] => Get all the results only between 40 TO 50
但是
nofyears_1:[1 TO 10] => Doesn't get results between 1 TO 10, but it fetches the result of 1 & 10 only.
以及,
nofyears_1:[1 TO 5] => It fetches the result of 1, 5 & 15 only.
为什么我的范围查询在该字段上不起作用?
两个字段都是
string
,并且没有多个值。
如果您想要使用数值进行范围查询,请使用数值字段。现在的问题是您使用的是字符串字段,并且字符串的排序顺序是:
1
10
11
...
2
20
...
40
41
..
49
50
.. 因此,如果您在字符串字段中查询
[1 TO 10]
,您将只得到前两个条目(而 40 TO 50 将检索从 40 到 50 的所有值 - 如果您有 400 或 499 的条目)他们也会被包括在内):
..
--
1
10
--
11
...
如果您为数据使用正确的字段类型(本例中为整数/ int),范围查询将按您的预期工作。
请记住,更改字段类型后您必须重新建立索引(这取决于您的设置方式,涉及更改
schema.xml
中的定义或通过托管架构 API)。