使用布尔运算符的奇怪Solr/Lucene行为

Nic*_*ini 10 lucene solr

我正在使用Solr/Lucene查询语法中的 - 运算符崩溃到一个奇怪的行为.如果我执行查询

-text AND -text 
Run Code Online (Sandbox Code Playgroud)

我得到了所有预期的结果(很多),但如果我加上一些括号

-text AND (-text) 
Run Code Online (Sandbox Code Playgroud)

要么

(-text) AND (-text) 
Run Code Online (Sandbox Code Playgroud)

然后我根本没有结果.我不明白为什么.你对这种行为有解释吗?

先感谢您.

Nic*_*ini 11

Solr邮件列表中已经很好地回答了这个问题 .他们还在官方常见问题解答中添加了一个条目,其中说:

布尔查询必须至少有一个"正"表达式(即;必须或应该)才能匹配.Solr试图帮助解决这个问题,如果要求执行一个在最顶层只包含否定子句的BooleanQuery ,它会添加一个匹配所有docs查询(即:*:*)

如果顶级BoolenQuery包含一个嵌套的BooleanQuery,其中只包含否定子句,那嵌套查询将不会被修改,并且(根据定义)它不匹配任何文档 - 如果需要,则表示外部查询将不匹配.

因此,只有"负"值的表达式总是返回0结果,除了最顶层,解析器*:*在查询开头静默添加a .

因此它-text AND -text被转换为*:* -text AND -text并且因此它具有结果,而不 (-text)被转换为(*:* -text),因为它不在最高级别,因此(-text)没有给出结果.