测试:1而不是bool:true
返回5个文件
但是
测试:1 AND(不是bool:true)
返回0个文件
为什么?
请解释lucene查询形成中括号的值
答案 0 :(得分: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
绝对是正确的。