2017-10-18 3 views
-1

Il y a 30000000 lignes stockées dans DB. toutes les lignes contiennent prénom et nom. Je voudrais interroger les données par prenom lastName mais je trouve que certains lastName contiennent un caractère spécial qui ne peut être trouvée actuellement il y a deux index normal prenom et nomFamillemysql comment améliorer le nom correspondance floue

Exemple: Susanna [Von Essen] ,Susanna VonEssen , Susanna Von Essen
différent lastName contiennent un caractère spécial , donc est-ce que je peux améliorer pour interroger ces 3 types de nom (même nom)?

résultat idéal Simulation:
requête: select *from provider where lastName like 'Von%'
Résultat: Susanna Von Essen,Susanna [Von Essen],Susanna VonEssen

requête: select *from provider where lastName like 'Von Essen%'
Résultat: Susanna Von Essen,Susanna [Von Essen],Susanna VonEssen

Merci!

+0

Il existe une fonction SOUNDEX() qui retournera une chaîne similaire dans https://dev.mysql.com/doc/refman/5.7/fr/string-functions.html#function_soundex phonétique. Voir aussi http://www.databasejournal.com/features/mysql/mysql-fuzzy-text-searching-using-the-soundex-function.html mais je pense que MySQL n'est pas très bon dans la recherche floue. Je vais suggérer Elasticsearch pour ce genre de but. –

+0

fonction ne supporte pas la recherche d'index, cela rendra la recherche lente, elasticsearch est ok mais la migration db est impossible maintenant –

Répondre

0

essayer:

select * de fournisseur où lastName comme '% Von%'

select * de fournisseur où lastName comme '% Von Essen%%'

0

SOUNDEX est très primitive; Je ne l'utiliserais pour rien.

Je recommande que, lorsque vous insérez des lignes, vous construisiez une autre colonne avec une forme "canonique" du nom. Exemples: supprimer des parenthèses, supprimer des espaces, dupliquer du texte dans plusieurs formulaires probables, etc. Ensuite, utilisez FULLTEXT pour effectuer la recherche car il y aura plusieurs "mots" dans la colonne.

Cela couvrira certains cas "floues". Vous pouvez l'adapter pour attraper plus de cas.