まず、私の質問のタイトルはあいまいですが、私は言い方が分かりません。あなたは私の例を見ると分かります。動的条件としてLuceneフィルタを追加するには?
SQLクエリでは、 '1 = 1'の動的条件を適用できます。
例を挙げておきます。
select * from PROD.EMPLY
WHERE 1=1
AND (NAME = 'JOHN' OR NAME = 'MARY' OR NAME = 'KEVIN') ;
上記のように、以下のようなフィルタを適用します。私が知っているようにLuceneのにはヌル/空の検索方法がないので
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
しかし、私は予想通りの結果が一致していない。(無安打)
は、それはです。 また、BooleanFilter/TermsFilterをMatchAllDocsQueryに切り替えることができるかどうかを確認しました。
私のケースでは、私のLuceneバージョンは古く(2.3.2)、私のバージョンではMatchAllDocsQueryが存在しないため、フィルターの条件がluceneの得点に影響しないようにしたいと思います。
私はstackoverflowとgoogleで検索しましたが、私の状況に一致するケースはありません。
ご協力いただければ幸いです。読んでいただきありがとうございます。
これは確かにかなり古いですが、チェックするためにソースをダウンロードしなければなりませんでしたが、実際には2.3.2の 'MatchAllDocsQuery'があります。 – femtoRgon
@femtoRgonコメントありがとうございました。あなたのコメントのおかげで、私はMatchAllDocsQueryがあることを発見しました。しかし、可能であれば、MatchAllDocsQueryを使用するのではなく、フィルターを使用したいのですが、フィルターはLuceneのスコアリングに影響するため、フィルターは使用しません。 – TwilighT