Мы разработали веб-приложение для сопоставления имен. Он работает, разбивая имена на части, а значение Soundex каждой части сохраняется в базе данных. Показатель расстояния Левенштейн используются для применения процентного соответствия звука, а также написания против данного имени.
Во время выполнения мы загружаем все записи в память и применяем расстояние Левенштейна ко всем значениям Soundex и правописанию всех частей всех имен.
Сначала это работало нормально, потому что было максимум 20 тысяч имен, но теперь у одного из наших клиентов есть 30 миллионов имен. Загрузка этого огромного списка в память для каждого запроса и применение этого типа сопоставления - жалкий подход, использующий много памяти и времени выполнения.
Мы ищем предложения для поиска в базе данных 30 миллионов записей или более в ближайшем будущем с процентным соответствием звука и правописания.
Основная функциональность
Конечный пользователь вводит имя для сопоставления и минимальный процент. Мы должны показать все те имена в базе данных, для которых любая часть имени совпадает с любой частью имени до заданного процента. Полное имя не должно совпадать, любая часть, если она соответствует проценту, является успешной. Например.
Given Name: Helen Hunt
Name in DB: Holly Hunter
Обе части обоих имен не совпадают точно, но в некоторой степени, допустим, 80%, поэтому, если пользователь вводит 80%, то имя в БД должно отображаться как совпадающее имя.