Desenvolvemos um aplicativo baseado na Web para correspondência de nomes. Ele opera dividindo nomes em partes e o valor Soundex de cada parte é armazenado em um banco de dados. A métrica de distância de Levenshtein é usada para aplicar a porcentagem de correspondência de som, bem como a ortografia em um determinado nome.
Em tempo de execução, carregamos todos os registros na memória e aplicamos a distância de Levenshtein a todos os valores do Soundex e a ortografia de todas as partes de todos os nomes.
No começo, tudo funcionou bem porque havia no máximo 20 mil nomes, mas agora um de nossos clientes tem 30 milhões de nomes. Carregar essa lista enorme na memória para cada solicitação e aplicar esse tipo de correspondência é uma abordagem patética, usando muita memória e tempo de execução.
Estamos procurando sugestões para pesquisar no banco de dados de 30 milhões de registros ou mais em um futuro próximo com a porcentagem correspondente de Som e ortografia.
Funcionalidade principal
O usuário final digita o nome a ser correspondido e a porcentagem mínima. Devemos mostrar todos os nomes no banco de dados para os quais qualquer parte do nome corresponde a qualquer parte do nome fornecido até a porcentagem especificada. Não é necessário corresponder o nome completo; qualquer parte se corresponder à porcentagem é um sucesso. Por exemplo.
Given Name: Helen Hunt
Name in DB: Holly Hunter
Ambas as partes de ambos os nomes não estão correspondendo exatamente, mas até certo ponto, vamos assumir 80%; portanto, se o usuário digitar 80%, o nome no DB deverá ser mostrado como nome correspondente.