Почему мой поиск Lucene.net не выполняется при выполнении нечеткого поиска по нескольким словам в поисковом запросе? - PullRequest
1 голос
/ 08 мая 2011

В моем приложении есть компания с полем имени This is a test, которое корректно индексируется Lucene.Net.Для справки, у моего MultiFieldQueryParser оператор по умолчанию установлен на QueryParser.Operator.AND.

Мой поиск проходит, когда я ищу this test~ и this tst~.Тем не менее, мой поиск завершается неудачно, когда я пытаюсь найти this~ test~, thas~ test~, thas test~ и другие варианты.

Вся эта цель состоит в том, чтобы позволить пользователю немного ошибиться в поиске, поэтомупользователь ищет Jon Doe, он все равно будет показывать результаты для John Doe, позволяя пользователям не помнить точное написание слов, введенных в базу данных.К сожалению, кажется, что он позволяет только нечеткие поиски по последнему слову в поисковой фразе.Я делаю что-то не так или мне нужно использовать отдельный анализатор для этого?

1 Ответ

5 голосов
/ 13 мая 2011

Мне недавно пришлось реализовать нечто подобное в моем проекте.

В итоге я разделил фразу на несколько сегментов и создал запрос вручную.

var input = "This is a test";

var fieldName = "yourField";
var minimumSimilarity = 0.5f;
var prefixLength = 3;
var query = new BooleanQuery();

var segments = input.Split(new[] {" "}, StringSplitOptions.RemoveEmptyEntries);
foreach (var segment in segments)
{
    var term = new Term(fieldName, segment);
    var fuzzyQuery = new FuzzyQuery(term, minimumSimilarity, prefixLength);
    query.Add(fuzzyQuery, BooleanClause.Occur.SHOULD);
}

Очень примитивно, я знаю, но, похоже, работает.

Примечание: это было проверено только на Lucene.net v2.3.1.3

...