データベース内の重複を除外する必要があります。問題は、重複が完全一致ではなく類似文書と見なされることです。この目的のためにFuzzyQuery
、次のように使用することにしました。
var fuzzyQuery = new global::Lucene.Net.Search.FuzzyQuery(
new Term("text", queryText),
0.8f,
0);
hits = _searcher.Search(query);
アイデアは、最小類似度を 0.8 に設定することでした (十分に高いと思います)。これにより、十分に類似していないドキュメントを除外して、類似したドキュメントのみが検出されます。
このコードをテストするために、既存のドキュメントが見つかるかどうかを確認することにしました。変数queryText
には、インデックスに格納されている値が割り当てられました。上記のコードは何も検出しませんでした。つまり、完全一致すら検出しませんでした。
インデックスは次のコードで作成されました:
doc.Add(new global::Lucene.Net.Documents.Field(
"text",
text,
global::Lucene.Net.Documents.Field.Store.YES,
global::Lucene.Net.Documents.Field.Index.TOKENIZED,
global::Lucene.Net.Documents.Field.TermVector.WITH_POSITIONS_OFFSETS));
以下の推奨事項に従いましたが、結果は次のとおりです。 TermQuery は結果を返しません。で構築されたクエリ
var _analyzer = new RussianAnalyzer();
var parser = new global::Lucene.Net.QueryParsers
.QueryParser("text", _analyzer);
var query = parser.Parse(queryText);
var _searcher = new IndexSearcher
(Settings.General.Default.LuceneIndexDirectoryPath);
var hits = _searcher.Search(query);
完全に一致するドキュメントと同様のコンテンツを持つ他のいくつかのドキュメントの最大スコアを持つ複数の結果を返します。