Как я могу использовать Lucene для поиска личного имени (имени, фамилии)? - PullRequest
3 голосов
/ 07 мая 2010

Я пишу функцию поиска для базы данных игроков НФЛ.

Пользователь вводит строку поиска, например "Джейсон Кэмпбелл" или "Кэмпбелл" или "Джейсон" .

У меня проблемы с получением соответствующих результатов.

Какой Analyzer мне следует использовать при индексации? Какой Query при запросе? Должен ли я различать имя и фамилию или просто индексировать строку полного имени?

Мне бы хотелось следующее поведение:

Запрос : "Джейсон Кэмпбелл" -> Результат : точное совпадение для 1 игрока, Джейсон Кэмпбелл

Запрос : "Кэмпбелл" -> Результат : все игроки с Кэмпбеллом в своем имени

Запрос : "Джейсон" -> Результат : все игроки с именем Джейсона

Запрос : "Кэмбел" [с орфографической ошибкой] -> Результат : все игроки с Кэмпбеллом в своем имени

1 Ответ

4 голосов
/ 07 мая 2010

StandardAnalyzer должен нормально работать для всех вышеуказанных запросов.Ваш первый запрос должен быть заключен в двойные кавычки для точного соответствия, ваш последний запрос потребует нечеткого запроса.Например, вы можете установить Кэмбелл ~ 0,5 и получить Кэмпбелл как совпадающее (с числовым значением после тильды, указывающим нечеткость).

Кстати, я бы предложил использовать Solr, который предоставляет функции для проверки орфографии и автоматическойпредложить, чтобы вам не пришлось изобретать велосипед.Это похоже на Google "Вы имели в виду ..."

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...