【发布时间】: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
test:1 AND NOT bool:true
返回 5 个文档
但是
test:1 AND (NOT bool:true)
返回 0 个文档
为什么?
请解释一下lucene查询形成中括号的值
【问题讨论】:
标签: search lucene parentheses query-parser booleanquery
当您将(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
绝对是正确的。
【讨论】: