2010-05-13 109 views
1

我正在使用一个布尔查询来组合几个查询。我发现如果我将一个BooleanQuery添加到BooleanQuery中,则不会返回任何结果。添加的BooleanQuery是一个MUST_NOT,与-city_id:100一样。嵌套布尔查询?

但是正如lucene的规范所说,BooleanQuery可以嵌套,我认为这意味着可以添加这样的BooleanQuery。现在我必须添加BooleanQuery中的所有子句,然后将它们逐个添加到容器BooleanQuery中。

我有点困惑。任何人都可以帮忙?非常感谢你!

回答

4

Lucene不支持unary NOT运算符。但是,您可以通过将其与MatchAllDocsQuery进行“与”运算来获得此类查询的结果。

+0

嗯,这似乎工作。谢谢。但是这不是令人困惑吗?我将BooleanQuery添加到BooleanQuery,并且仍然需要检查要添加的查询是否具有AND某些查询。 此外,ANDing MatchAllDocsQuery在这种情况下会破坏性能吗? – KailZhang 2010-05-13 10:17:37

+0

你可以阅读关于这个线程的布尔查询特异性。 http://search-lucene.com/m/8x64lENo571/基本上,NOT不仅仅是压制文档。你需要另一个积极的组合才能使用它。 我不知道MatchAllDocsQuery的实现细节,但gettig所有文档应该足够快。附加的AND操作应该是快速的,以及它在内部对bitset的操作。 – 2010-05-17 13:13:53

+0

对以前的评论中的中断句子表示歉意。 – 2010-05-18 11:34:27