2011-06-01 90 views
0

我一直在尝试在lucene中运行以下布尔查询,但它似乎失败。请帮忙。在Lucene中布尔搜索

(a或b)和c - >工作正常

(a和b)或c - >给出了A和B或C的结果。所以一个必须和b和c变得应该,而搜索结果是错误的。它应该像a一样工作,b必须可用或c可用。

又如:

如果你搜索“(A和B)”,它将返回X结果

如果你搜索“C”,它将返回是导致

如果您搜索对于“(a和b)或c”,结果数量不能小于x或y中的较大值。但是这没有发生。请帮助我该如何着手实施?

+0

做一个b和c是你正在寻找的实际值? – PVR 2016-06-19 16:55:29

回答

0

(a AND b)或c被转换为(+a +b) c。你想要的是没有括号:+a +b c

从逻辑的角度来看,“A和B必须出现,C可能出现”相当于“A和B必须出现”。 (在古典逻辑中,没有办法说“可能是真的”)。因此,用布尔量表示(+a +b) c会有困难。你可以做的一种方法是“(a AND b AND c)或(a AND b)”。

+0

感谢您的回复Xodarap。然而,我的理解是,所有的文档都有任何一个<"a AND b">或<"c">,它们都应该出现在这个布尔搜索结果中,这是不会发生的。 因此,从逻辑的角度来看,如果A和B出现或在文档中只有C出现在文档中,则所有这些文档都应该返回到结果集中。 – ranjit 2011-06-02 08:13:59

+0

@ranjit:你有没有试过像(+ a + b)c'这样做?这至少会缩小问题所在。我认为在一些查询解析器中,OR需要大写,这不在你的例子中 - 所以这可能就是它。 – Xodarap 2011-06-02 13:05:04