3

我有许多数字 Lucene 索引字段:

60000
78500
105000

如果我使用 LUKE 查询 78500 如下:

price:78500

它返回正确的记录,但是如果我尝试将所有三个记录作为一个范围返回,我不会得到任何结果。

price:[60000 TO 105000]

我意识到这是由于填充,因为数字被 Lucene 处理为字符串,但是我只想知道我应该在 LUKE 中放入什么来返回这三个记录。

非常感谢您的帮助。

4

4 回答 4

11

如果字段索引为 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>
于 2013-05-06T16:20:46.477 回答
3

我为此使用的解决方案是输入的价格值需要以填充形式添加到索引中。然后我会查询效果很好的新填充值。因此,索引中的新值是:

060000
078500
105000

该解决方案与 Umbraco 的检查搜索问题相关联,因此论坛上有一个关于如何实现基于数字的范围搜索的主题,如果有人需要,它位于此处,并提供端到端的遍历。

Umbraco 论坛主题

于 2011-02-07T10:31:35.107 回答
1
  1. 零填充不会出现在此特定查询中,因为您显示的所有数字都具有相同的位数
  2. 您显示的范围查询在范围的第二部分有太多零
  3. 因此,对您显示的数据的查询将是price:[10500 TO 78500]

希望这可以帮助,

于 2011-02-03T21:27:09.030 回答
1

我假设这些字段被索引为NumericFields。他们的问题是 Lucene/Luke 不知道如何自动解析数字查询。您需要覆盖 LuceneQueryParser并提供您自己的逻辑应该如何解释这些数字。

据我所知,Luke 允许坚持使用您的自定义解析器,它只需要存在于 CLASSPATH 中。

看看 Lucene 邮件列表上的这个线程:

http://mail-archives.apache.org/mod_mbox/lucene-java-user/201102.mbox/%3CAANLkTi=XUpyw09tcbjuTzNRpMJa730Cq-6_1agMAjYz6@mail.gmail.com%3E

于 2011-02-05T10:45:18.927 回答