【发布时间】:2013-07-22 00:40:31
【问题描述】:
我了解 lucene 的 AND (&&)、OR (||) 和 NOT (!) 运算符分别是 REQUIRED、OPTIONAL 和 EXCLUDE 的简写,这就是为什么不能将它们视为布尔运算符(遵守布尔代数) )。
我一直在尝试构造一个简单的OR表达式,如下
q = +(field1:value1 OR field2:value2)
在 field1 或 field2 上匹配。但由于 OR 只是一个可选的,当 field1:value1 和 field2:value2 都匹配的文档时,查询会返回一个分数,从而导致两个子句都匹配。
如何在这种情况下强制执行短路?换句话说,如何在布尔代数中实现短路,其中表达式 A ||乙 ||如果 A 为真,C 会返回真,甚至不考虑 B 或 C 是否为真。
【问题讨论】:
-
@arun - 感谢您发布链接。它很好地概述了 solr/lucene 提供的各种运算符。但它没有回答我关于短路的问题。在我看来,模拟我想要的一种方法是编写以下查询:(x !y !z) OR (y !z !x) OR (z !x !y)。但是上一个查询的问题是,所有三个子句都被执行,而与任何子句的匹配无关(违背了 OR 运算符的目的)。
-
我认为建议的网址已移至此处lucidworks.com/post/why-not-and-or-and-not
标签: solr lucene boolean-logic