Lucene Fuzzy Поиск имен клиентов и частичных адресов - PullRequest
6 голосов
/ 08 декабря 2010

Я просматривал все существующие посты с вопросами, но не мог найти что-то очень важное.

У меня есть файл с миллионами записей для имени, фамилии, адреса1, адреса2, кода страны, датырождения - я хотел бы ежедневно проверять свой список клиентов с указанным файлом (мой список клиентов также обновляется ежедневно, а файл также обновляется ежедневно).

Для имени и фамилии я хотел бы получить нечеткое совпадение (может быть совпадение по нечеткой лукине / расстояние Левенштейна 90%), а для оставшихся полей страну и дату рождения я хотел точное совпадение.

IЯ новичок в Lucene, но, посмотрев на количество сообщений, похоже, что это возможно.

Мои вопросы:

  • Как мне индексировать мой входной файл?Мне нужно построить индекс по комбинации FN, LN, страна, DOB и использовать индекс для поиска
  • Как я могу использовать Fuzzy запрос Lucene здесь?

Есть ли еще какие-либоКак я могу реализовать то же самое?

Ответы [ 2 ]

4 голосов
/ 08 декабря 2010

Рушик, вот несколько идей:

  • Рассмотрите возможность использования Solr . Намного легче начать использовать это, чем голый Lucene.
  • Создание индекса Lucene / Solr для файла. Похоже, что для каждого клиента достаточно документа, если вы используете многозначное поле или два разных поля для адресов.
  • У вас есть уникальный идентификатор на человека? Чтобы использовать Solr, вам нужен один. В Lucene вы можете уйти, не используя уникальный идентификатор.
  • Сохраните код страны как «ключевое слово». Если вам требуется только точное соответствие дате рождения, вы можете сделать то же самое. Для запросов диапазона вам понадобится другое представление.
  • Я полагаю, ваш список клиентов меньше файла. Возможной политикой будет ежедневная индексация изменений в файле (здесь действительно удобен уникальный идентификатор - в противном случае вам нужно удалить запросом, который может пропустить отметку). Затем вы можете оптимизировать индекс и после этого запустить поиск обновленного списка клиентов.
  • То, что вы описываете, является BooleanQuery , чьи предложения являются нечеткими запросами имени и фамилии, а также запросами термина для других полей. Вы можете создать запрос программно или используя анализатор запросов .
  • Попробуйте использовать soundex для имен, как описано здесь .
2 голосов
/ 20 октября 2015

Некоторые академические статьи на эту тему стоит прочитать (Google для бесплатных PDF-файлов):

  • Сравнение личных имен: методы и практические вопросы (2006)
  • Обзор записей и текущих направлений исследований (2006)
  • Параллельная система связи с открытым исходным кодом (2004)

Вы также должны рассмотреть следующие библиотеки / фреймворки:

(Ответ для будущих посетителей.)

...