【问题标题】:Weird Solr/Lucene behaviors with boolean operators带有布尔运算符的奇怪 Solr/Lucene 行为
【发布时间】:2011-11-13 21:31:25
【问题描述】:

我在 Solr/Lucene 查询语法中使用 - 运算符时遇到了一种奇怪的行为。 如果我执行查询

-text AND -text 

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

-text AND (-text) 

(-text) AND (-text) 

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

提前谢谢你。

【问题讨论】:

标签: lucene solr


【解决方案1】:

这个问题已经得到很好的回答 Solr mailing list。他们还在官方常见问题解答中添加了一个条目,上面写着:

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

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

所以只有“负”值的表达式总是返回 0 结果,除了最顶层,解析器在查询的开头默默地添加一个*:*

因此,-text AND -text 被转换为 *:* -text AND -text,所以它有结果,而 (-text) 没有转换为 (*:* -text),因为它不在最顶层,所以 (-text) 没有给出任何结果。

【讨论】:

    【解决方案2】:

    解释取决于您使用的搜索处理程序和整个查询字符串。

    例如:您可以搜索多个字段,例如

    text AND text

    FIELD1:text AND text AND 在 FIELD1 中搜索

    FIELD1:text1 AND (-text2)

    我认为,使用 () 会改变搜索的范围/字段。

    也许你描述的行为与这样的事情有关?!

    【讨论】:

    • 我的默认字段称为“全文”。如果我写全文而不是文本,行为不会改变...
    猜你喜欢
    • 2010-11-20
    • 2015-02-24
    • 2011-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多