测试:1 AND NOT 布尔值:真
返回 5 个文件
但
测试:1 AND(非布尔:真)
返回 0 个文档
为什么?
请解释一下lucene查询形成中括号的值
测试:1 AND NOT 布尔值:真
返回 5 个文件
但
测试:1 AND(非布尔:真)
返回 0 个文档
为什么?
请解释一下lucene查询形成中括号的值
当您放在(NOT bool:true)
括号中时,它成为一个子查询,它独立于 query 执行test:1
。 NOT
Lucene 中的子句仅从结果集中删除元素,它们什么也找不到。例如,在 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
绝对是正确的一个。