0

测试:1 AND NOT 布尔值:真

返回 5 个文件

测试:1 AND(非布尔:真)

返回 0 个文档

为什么?

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

4

1 回答 1

1

当您放在(NOT bool:true)括号中时,它成为一个子查询,它独立于 query 执行test:1NOTLucene 中的子句仅从结果集中删除元素,它们什么也找不到。例如,在 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

绝对是正确的一个。

于 2013-05-28T15:45:52.983 回答