この質問は、新しい発見後に編集されました
(TFIDF) を使用しDefaultSimilarity
て、4 つのドキュメントでサンプル インデックスを検索しています。フィルター処理されたクエリを使用すると、結果の数は正しく減りますが、ドキュメントのスコアは変わらないことに気付きました。これは非常に疑問に思いました...
そこで、 、、およびのf 値をDefaultSimilarity
出力するように拡張し、実際にこれらの値がまったく変化しないことを確認しました。フィルターによって導入されたより小さな検索スペースを反映することを期待していました。(お時間のある方はこちらをお読みください)tf*id
term_frequency
total_number_of_documents
document_frequency
numDocs
docFreq
これは私のドキュメント コレクションです (テキストは TextField です)。
id=0 type=type.colors title=This is a black dog
id=1 type=type.pets title=This is a black cat
id=2 type=type.colors title=The cat is white
id=3 type=type.pets title=The cat is black
「黒」で検索すると、
Query query = parser.parse("black");
TopDocs results = searcher.search(query, 5);
私は期待どおりに取得numDocs=4
しdocFreq=3
ます。
次に、次の方法で検索スペースを削減しようとしました。
1)
PrefixFilter prefixFilter = new PrefixFilter(new Term("type", "type.colors"));
TopDocs results = searcher.search(query, prefixFilter, 5);
2)
PrefixQuery categoryQuery = new PrefixQuery(new Term("type", "type.colors"));
QueryWrapperFilter categoryFilter = new QueryWrapperFilter(categoryQuery);
TopDocs results = searcher.search(query, categoryFilter, 5);
3)
BooleanQuery booleanQuery = new BooleanQuery();
booleanQuery.add(new PrefixQuery(new Term("type", "type.colors")), Occur.MUST);
booleanQuery.add(blackQuery, Occur.MUST);
そして、numDocs と docFreq の値は常に同じになります。(instead of numDocs=2 and docFreq=1
検索スペースは 2 つのドキュメントに削減され、そのうちの 1 つだけに「黒」が含まれているため);
これらの値は、インデックスの作成時に事前に計算されているか、クエリが返された後にフィルターが適用されているようです。私はどちらの選択肢にも満足していません...
フィルターが適用された後、Lucene にこれらの値を計算させるにはどうすればよいですか?
完全な要旨はこちら