使用 LUKE 进行 Lucene 数字范围搜索

发布于 2024-10-15 08:11:00 字数 331 浏览 7 评论 0原文

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

60000
78500
105000

如果我使用 LUKE 查询 78500,如下所示:

price:78500

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

price:[60000 TO 105000]

我意识到这是由于填充造成的,因为 Lucene 将数字视为字符串,但我只是想知道应该将什么放入 LUKE 中以返回三个记录。

非常感谢您的帮助。

I have a number of numeric Lucene indexed fields:

60000
78500
105000

If I use LUKE to query for 78500 as follows:

price:78500

It returns the correct record, however if I try to return all three record as a range I get no results.

price:[60000 TO 105000]

I realise this is due to padding as numbers are treated strings by Lucene however I just wish to know what I should be putting into LUKE to return the three records.

Many thanks for any help.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

春庭雪 2024-10-22 08:11:00

如果字段被索引为 NumericField,则必须在查询解析器选项卡和 3.5 版本的 Luke 中使用“使用 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>

If the fields are indexed as NumericField you must use "Use XML Query Parser" option in query parser tab and the 3.5 version of Luke:

https://code.google.com/p/luke/downloads/detail?name=lukeall-3.5.0.jar&can=2&q=

An example of query with a string and numeric field is:

<BooleanQuery>
<Clause fieldName="colour" occurs="must">
    <TermQuery>rojo</TermQuery>
</Clause>
<Clause fieldName="price" occurs="must">
    <NumericRangeQuery type="int" lowerTerm="4000" upperTerm="5000" />
</Clause>
</BooleanQuery>
真心难拥有 2024-10-22 08:11:00

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

060000
078500
105000

此解决方案与 Umbraco 的“检查”搜索问题相关联,因此论坛上有一个关于如何实现基于数字的范围搜索的主题(如果有人需要的话),它位于此处,并带有一个演练结束结束。

Umbraco 论坛主题

The solution I used for this was that the values inputted for price needed to be added to the index in padded form. Then I would just query the new padded value which works great. Therefore the new values in the index were:

060000
078500
105000

This solution was tied into an Examine search issue for Umbraco so there is a thread on the Forum of how to implement a numeric based range search if anyone requires this it is located here with a walk through end to end.

Umbraco Forum Thread

扭转时空 2024-10-22 08:11:00
  1. 零填充不会出现在这个特定的查询中,因为您显示的所有数字都具有相同的位数
  2. 您显示的范围查询在范围的第二部分有太多零
  3. 所以对您的数据的查询显示的价格为 price:[10500 TO 78500]

希望这会有所帮助,

  1. Zero padding won't come into this particular query since all the numbers you've shown have the same number of digits
  2. The range query you've shown has too many zeros on the second part of the range
  3. So the query for the data you've shown would be price:[10500 TO 78500]

Hope this helps,

昔梦 2024-10-22 08:11:00

我假设这些字段被索引为 NumericField。它们的问题是 Lucene/Luke 不知道如何自动解析数字查询。您需要重写 Lucene 的 QueryParser 并提供您自己的逻辑来解释这些数字。

据我所知,Luke 允许使用自定义解析器,它只需要出现在 CLASSPATH 中即可。

查看 Lucene 邮件列表上的此线程:

http://mail-archives.apache.org/mod_mbox/lucene-java-user/201102.mbox/%

I assume these fields are indexed as NumericFields. The problem with them is that Lucene/Luke does not know how to parse numeric queries automatically. You need to override Lucene's QueryParser and provide your own logic how these numbers should be interpreted.

As far as I know, Luke allows sticking in your custom parser, it just need to be present in the CLASSPATH.

Have a look at this thread on Lucene mailing list:

http://mail-archives.apache.org/mod_mbox/lucene-java-user/201102.mbox/%[email protected]%3E

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文