我有许多数字 Lucene 索引字段:
60000
78500
105000
如果我使用 LUKE 查询 78500 如下:
price:78500
它返回正确的记录,但是如果我尝试将所有三个记录作为一个范围返回,我不会得到任何结果。
price:[60000 TO 105000]
我意识到这是由于填充,因为数字被 Lucene 处理为字符串,但是我只想知道我应该在 LUKE 中放入什么来返回这三个记录。
非常感谢您的帮助。
如果字段索引为 NumericField,则必须在查询解析器选项卡和 Luke 的 3.5 版本中使用“使用 XML 查询解析器”选项:
https://code.google.com/p/luke/downloads/detail?name=lukeall-3.5.0.jar&can=2&q=
带有字符串和数字字段的查询示例如下:
<BooleanQuery>
<Clause fieldName="colour" occurs="must">
<TermQuery>rojo</TermQuery>
</Clause>
<Clause fieldName="price" occurs="must">
<NumericRangeQuery type="int" lowerTerm="4000" upperTerm="5000" />
</Clause>
</BooleanQuery>
我为此使用的解决方案是输入的价格值需要以填充形式添加到索引中。然后我会查询效果很好的新填充值。因此,索引中的新值是:
060000
078500
105000
该解决方案与 Umbraco 的检查搜索问题相关联,因此论坛上有一个关于如何实现基于数字的范围搜索的主题,如果有人需要,它位于此处,并提供端到端的遍历。
price:[10500 TO 78500]
希望这可以帮助,
我假设这些字段被索引为NumericField
s。他们的问题是 Lucene/Luke 不知道如何自动解析数字查询。您需要覆盖 LuceneQueryParser
并提供您自己的逻辑应该如何解释这些数字。
据我所知,Luke 允许坚持使用您的自定义解析器,它只需要存在于 CLASSPATH 中。
看看 Lucene 邮件列表上的这个线程: