умный поиск по имени / фамилии - PullRequest
0 голосов
/ 23 июня 2011

Мне нужно создать средство поиска, способное искать участников по их имени / фамилии и может быть некоторыми другими параметрами поиска (например, адресом).

Поиск должен содержать список подходящих кандидатов, чтобыпользователь может выбрать то, что ему / ей кажется «правильным» соответствием.

Поиск должен быть достаточно умным, чтобы «правильный» результат был в числе первых нескольких элементов в списке.Поиск также должен быть терпимым к опечаткам и орфографическим ошибкам и, возможно, даже быть в курсе ярлыков имен, то есть Боба против Роберта или Билла против Уильяма.

Я начал исследовать Люсена и его семью (например, упругий поиск)как инструмент для работы.Хотя он обладает впечатляющим набором функций, решающих аналогичные проблемы для полнотекстового поиска, я не совсем уверен, как использовать их для своей задачи - вплоть до того, что, возможно, Lucene здесь совсем не тот инструмент.

Что вы, ребята, думаете - как я могу использовать Elastic Search для решения моей проблемы?Или я должен искать в другом месте?

Ответы [ 3 ]

3 голосов
/ 24 июня 2011

Lucene поддерживает редактирование дистанционных запросов, так что ваш поисковый запрос будет допускать некоторые опечатки, вы определяете это как разрешенную дистанцию ​​редактирования для термина.

например:

name:johnni~0.8

вернул бы "Джонни"

Также Solr предоставляет широкий спектр готовых поисковых фильтров и анализаторов, которые вы можете использовать для поиска. В вашем случае я бы, вероятно, объединил несколько заводов фильтров:

  • TrimFilterFactory - обрезать запрос
  • LowerCaseFilterFactory - чтобы избавиться от различий в регистре
  • ISOLatin1AccentFilterFactory - для удаления акцентов с букв (большинство людей все равно не ищут с акцентом)
  • PhoneticFilterFactory - для сопоставления звуков, например запросов: kris -> chris

посмотрите документацию по ссылке, довольно просто узнать, как настроить новый экземпляр solr с помощью Analyzer, который использует все вышеупомянутые фильтры. Я использовал что-то подобное для поиска названий городов, и это работало довольно хорошо.

0 голосов
/ 24 июня 2011

Что касается Боба / Роберта, это можно сделать с помощью синонимов, но вам нужно получить данные синонимов из какого-то надежного источника.

В дополнение к тому, что упомянуто @Asaf, вы можете попытаться использоватьИндексирование N-граммы, чтобы иметь дело с вариантами правописания.См. CJKAnalyzer для примера того, как это сделать.

0 голосов
/ 24 июня 2011

Lucene может быть сделан терпимым к опечаткам и орфографическим ошибкам, и может использовать синонимы.Что касается

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

Существуют ли поисковые системы, которые нене пытаетесь это сделать?

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