首先,我知道我的問題的標題是含糊不清的,但我不知道該怎麼說。你會看到我的例子。如何將Lucene過濾器添加爲動態條件?
在SQL查詢中,可以將'1 = 1'應用於動態條件。
讓我舉個例子。
select * from PROD.EMPLY
WHERE 1=1
AND (NAME = 'JOHN' OR NAME = 'MARY' OR NAME = 'KEVIN') ;
如上所述,我想應用下面的過濾器。
BooleanFilter BF = new BooleanFilter();
TermsFilter tf1 = new TermsFilter();
TermsFilter tf2 = new TermsFilter();
//tf1 => 1=1
//tf2 => name condition
tf2.addTerm("name", "JOHN");
tf2.addTerm("name", "MARY");
tf2.addTerm("name", "KEVIN");
BF.add(new FilterClause(tf1, Occur.MUST)); // 1=1 condition
BF.add(new FilterClause(tf2, Occur.MUST)); // name condition
但正如我希望的結果是不匹配的。(沒有命中)
據我所知,這是因爲有一個在Lucene中沒有空/空搜索方法。 我還檢查了是否可以用MatchAllDocsQuery來切換BooleanFilter/TermsFilter。
但是在我的情況下,我的Lucene版本很舊(2.3.2),我的版本中沒有MatchAllDocsQuery,我不希望過濾器的條件影響lucene的評分。
我在stackoverflow和谷歌搜索,但沒有匹配我的情況。
任何幫助將非常感激,並感謝您的閱讀。
這確實很舊,不得不下載源代碼來檢查,但是* *是*,實際上是2.3.2中的一個'MatchAllDocsQuery'。 – femtoRgon
@femtoRgon感謝您的評論。感謝您的評論,我發現有MatchAllDocsQuery。但是,如果可能的話,我想使用過濾器而不是使用MatchAllDocsQuery,因爲Query會影響Lucene的評分,而過濾器則不會。 – TwilighT