我正在使用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)没有给出结果.