2010-05-13 156 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