Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment résoudre le dilemme du stockage des noms humains dans MySQL et conserver à la fois la discriminabilité et la recherche de noms similaires ?

Ce qui est utile, c'est si vous pouvez décomposer le nom complet en composants "mots du nom" et stocker un codage phonétique (métaphone ou l'un des nombreux autres choix) pour chacun d'eux. Vous avez juste besoin de la notion de mots de nom, sans les catégoriser spécifiquement comme premier ou deuxième ou dernier, ce qui est bien parce que ces catégories ne fonctionnent pas bien dans toutes les cultures de toute façon). Mais vous pouvez utiliser les informations d'ordre de position plus tard dans le classement si vous le souhaitez, de sorte que la recherche de "Paul Carl" corresponde mieux à "Paul Karl" qu'à "Carl Paul". Vous devez être conscient de la ponctuation ambiguë qui peut nécessiter le stockage de plusieurs versions de certains mots du nom. Par exemple, Bre-Anna Heim serait divisée en mots de nom "bre" "anna" "breanna" et "heim". Parfois, le tiret n'est pas pertinent comme Bre-Anna, mais parfois pas comme dans Sally-June". Bre-Anna n'utilise jamais que Bre ou Anna, mais Sally-June peut parfois utiliser Sally ou juste June. Il est difficile de savoir lequel, alors couvrir les deux possibilités.

Vous pouvez écrire votre requête par rapport à cela en décomposant et encodant phonétiquement de la même manière le nom complet que vous recherchez. Votre requête peut renvoyer, par exemple, les noms complets qui ont au moins deux correspondances phonétiques de nom de composant (ou une s'il n'y a qu'un seul nom dans la recherche ou la source). Cela vous donne un sous-ensemble de noms complets à considérer plus avant. Vous pourriez proposer un classement simple d'entre eux, ou même faire quelque chose comme un algorithme d'appariement de distance sur ce sous-ensemble, ce qui serait trop coûteux en calcul pour le faire contre le million entier de noms. Quand je dis correspondance de distance, je parle d'algorithmes en ligne comme la distance de Levenshtein et autres.

(modifier) ​​Le raisonnement pour cela est de gérer des cas comme le nom suivant :Maria de los Angeles Gomez-Rodriguez. Une personne de saisie de données peut simplement entrer Maria Gomez. Un autre pourrait entrer Maria Gomez Rodriguez. Une autre pourrait entrer dans Maria Angeles Rodrigus.