Мне нужно исключить дубликаты в моей базе данных. Проблема в том, что дубликаты не считаются точным соответствием, а скорее похожими документами. Для этой цели я решил использовать 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);
Возвращает несколько результатов с максимальным баллом для документа с точным соответствием и других документов с аналогичным содержанием.