Indexing 带LUKE的Lucene数字范围搜索

Indexing 带LUKE的Lucene数字范围搜索,indexing,lucene,luke,Indexing,Lucene,Luke,我有许多数字Lucene索引字段: 60000 78500 105000 如果我使用LUKE查询78500,如下所示: price:78500 它返回正确的记录,但是如果我尝试将所有三条记录作为一个范围返回,则不会得到任何结果 price:[60000 TO 105000] 我意识到这是由于数字被Lucene处理为字符串而造成的,但是我只想知道我应该在LUKE中输入什么来返回这三条记录 非常感谢你的帮助 由于所显示的所有数字都具有相同的位数,所以零填充将不会出现在这个特定的查询中 您显示的

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

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

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

price:[60000 TO 105000]
我意识到这是由于数字被Lucene处理为字符串而造成的,但是我只想知道我应该在LUKE中输入什么来返回这三条记录

非常感谢你的帮助

  • 由于所显示的所有数字都具有相同的位数,所以零填充将不会出现在这个特定的查询中
  • 您显示的范围查询在范围的第二部分有太多的零
  • 因此,您显示的数据查询将是
    price:[10500到78500]

  • 希望这有帮助,

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

    据我所知,Luke允许插入自定义解析器,它只需要出现在类路径中

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


    我使用的解决方案是,为价格输入的值需要以填充形式添加到索引中。然后,我将只查询新的填充值,该值非常有效。因此,指数中的新值为:

    060000
    078500
    105000
    
    此解决方案与Umbraco的“检查搜索”问题相关联,因此论坛上有一条关于如何实现基于数字的范围搜索的线索,如果有人需要,它位于此处,具有端到端的漫游功能


    如果字段索引为NumericField,则必须使用“查询解析器”选项卡中的“使用XML查询解析器”选项和Luke的3.5版本:

    使用字符串和数字字段的查询示例如下:

    <BooleanQuery>
    <Clause fieldName="colour" occurs="must">
        <TermQuery>rojo</TermQuery>
    </Clause>
    <Clause fieldName="price" occurs="must">
        <NumericRangeQuery type="int" lowerTerm="4000" upperTerm="5000" />
    </Clause>
    </BooleanQuery>
    
    
    罗霍
    
    您试过了吗:价格:[“60000”到“105000”]谢谢Joel,是的,我试过了,但仍然没有返回结果?抱歉,最后一个数字是105000,我现在编辑。我已经设法解决了这个问题,所以现在我将发布一个答案。非常感谢您的提示。非常感谢这些信息,我现在已经设法解决了这个问题。这是OP问题的正确答案,因为它说明了OP想要做的事情不起作用的原因(自动将字符串输入解释为数字范围查询)。如果希望用户能够以文本形式输入数字范围查询,这可能是最好的解决方案。如果您有不同的方法来收集输入,那么您应该使用
    numeriRangeQuery
    类,并使用它手动构造查询,而不是使用
    QueryParser