Как я могу наилучшим образом использовать поиск имен людей в Azure - PullRequest
1 голос
/ 05 ноября 2019

У меня есть база данных с более чем миллионом контактов, и мне нужно вернуть наилучшие совпадения для а) пользовательских запросов и б) пакетных заданий, которые периодически запускаются. Не много споров о том, что сопоставление имен людей является сложным, и я рассматриваю разные маршруты:

  1. Бросьте свои собственные (дайте нам что-то базовое, чтобы вытащить нас из блоков). Много хороших тем на эту тему, таких как Как рассчитать оценку для поиска имени Метафона / Soundex в .net
  2. Использование поиска Azure / Когнитивные навыки: Наша платформа уже встроена в Azure ииспользование поиска Azure потенциально может быть менее трудоемким, чем (1), и меньшим переходом, чем (3)
  3. Посмотрите на сторонних разработчиков за пределами Azure, которые специализируются в области сопоставления имен людей (NetOwl / Basistech / и т. д.).

Учитывая, что мы нацелены на решение проблем, связанных с именами людей в западном стиле, может кто-нибудь дать мне плюсы и минусы использования Azure Search для решения этой проблемы? Вот некоторые классы вопросов, которые, я надеюсь, мы сможем решить:

  • Фонетическое сходство: Иисус <=> Хейзей
  • Различия в транслитерации: Абдул Рашид <=> Абд аль-Рашид
  • Альтернативные имена: Уильям <=> Уилл <=> Билл <=> Билли
  • Пропущены пробелы или дефисы: МэриЭллен <=> Мэри Эллен <=> Мэри-Эллен
  • Сокращенные компоненты имени: McDonalds <=> McDonald <=> McD
  • Необязательные токены имени: Joaquín Archivaldo Guzmán Loera <=> Joaquín Guzmán
  • Варианты порядка имен: Park Sol Mi <=> Sol MiПарк
  • Инициалы: Дж. Э. Смит <=> Джеймс Эрл Смит

Заранее благодарен за любые советы и помощь. Саймон.

1 Ответ

0 голосов
/ 07 ноября 2019

Интересный случай! Я считаю, что нет правильного или неправильного ответа на это решение, и оно также будет зависеть от бюджета и временных ограничений. Каков ваш основной источник данных? Используете ли вы поддерживаемый источник для индексатора когнитивного поиска Azure, например SQL или CosmosDB. Как хранятся контакты? Имя и фамилия разделены или все в одном поле?

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

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

Фонетическое сходство: Иисус <=> Хейзей

Вы можете добавить PhoneticTokenFilter, где вы можете выбрать кодер с наилучшими характеристиками для вашего конкретного случая.

Различия в транслитерации: Абдул Рашид <=> Абд аль-Рашид

Нечеткий поиск может быть вариантом, однако приведенный выше пример слишком отличается.

Альтернативные имена: Уильям <=> Будет <=> Билл <=> Билли

Вы можетеиспользуйте SynonymMaps, если у вас есть эти данные.

Недостающие пробелы или дефисы: Мэри Эллен <=> Мэри Эллен <=> Мэри-Эллен

Вы можете использовать токенайзер , который удалит пробелы и знаки препинания / символы.

Сокращенные компоненты имени: McDonalds <=> McDonald <=> McD Вы можете использовать SynonymMaps, если у вас есть эти данные. Тем не менее, я думаю, что нечеткий поиск уже может сделать эту работу.

Дополнительные токены имени: Joaquín Archivaldo Guzmán Loera <=> Joaquín Guzmán Вы можете использовать Поиск близости .

Варианты порядка имен:Park Sol Mi <=> Sol Mi Park

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

Инициалы: JEСмит <=> Джеймс Эрл Смит

Возможно, вы можете использовать токенизатор в сочетании с нечетким поиском. Не уверен насчет этого случая.

Хорошее дополнениеявляется то, что вы также можете предложить предложения и / или автозаполнение , чтобы показать пользователю возможные результаты во время набора.

Мои ответы не решат все случаи напрямую, но это даст вам старт. Вам придется много тестировать и настраивать, поэтому вам следует взглянуть на ограничение по времени и бюджету.

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