【问题标题】:Combination of AND , OR with NOT in grouping组合中的 AND , OR 与 NOT
【发布时间】:2013-05-23 00:41:43
【问题描述】:

test:1 AND NOT bool:true

返回 5 个文档

但是

test:1 AND (NOT bool:true)

返回 0 个文档

为什么?

请解释一下lucene查询形成中括号的值

【问题讨论】:

    标签: search lucene parentheses query-parser booleanquery


    【解决方案1】:

    当您将(NOT bool:true) 放在括号中时,它就变成了一个子查询,它的执行独立于查询test:1。 Lucene 中的NOT 子句仅从结果集中删除元素,它们什么也找不到。例如,在 SQL 中,您隐式地从每个可用值开始,并过滤掉不匹配子句的元素。在 Lucene 中,您从零开始,然后根据子句查找结果。查询NOT bool:true 告诉它不匹配的内容,但不给Lucene 任何可查找和返回的内容。任何形式的查询:

    (any query finding results) AND (NOT something)
    

    将找到零个结果,因为就其本身而言,NOT something 什么也找不到,而(something) AND (nothing) 什么也没有返回。您可以通过在孤独的NOT 子句之前首先获取所有值来执行类似的搜索,例如:

    test:1 AND (*:* AND NOT bool:true)
    

    但是,这会表现得很糟糕,你的第一个例子:

    test:1 AND NOT bool:true
    

    绝对是正确的。

    【讨论】:

    • 感谢您的解释
    猜你喜欢
    • 2017-06-27
    • 2011-07-14
    • 2018-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-28
    • 1970-01-01
    • 2012-10-27
    相关资源
    最近更新 更多