MS SQL – OERE les correspondances de sous-strings sont phonétiques?

Je voudrais créer une fonctionnalité de search basée sur les termes "ressemble à".

Par exemple, disons que j'ai une list d'entresockets qui ressemble à ceci (disons que nous vivons aussi dans le monde de Bizzaro):

  • Acmé
  • Déjà allusion cite LTD
  • Tout prêt au site d'illusion INC
  • Apart assent
  • Assent voir

(Ou quelque chose simmilar avec des noms … George ou Jeorge ? "Yah-way", ou "ye-hova"?)

Quand quelqu'un cherche quelque chose qui "sonne" comme le soundex("site") == S230 , il devrait voir aussi les résultats pour "Sight".

Comme la plupart des gens qui ont déjà utilisé soudnex savent déjà, les correspondances de sous-strings normales ne le font évidemment pas.

J'essaie de find dans ma tête comment faire une clause WHERE qui peut correspondre à cela, donc au lieu d'une WHERE company LIKE input typique de la part de WHERE company LIKE input , j'aimerais lancer un soundex. Évidemment, si je lance soundex sur l'set du nom de l'entreprise, je ne serai pas capable de faire une search de sous-string (par exemple, un user recherchant "ALL" ne correspondra jamais à un soundex de "All ready"). Soundex split sur chaque mot peut ne pas valoir le coup, donc je ne suis pas sûr que l'exécution de toutes les combinaisons d'un soundex est une bonne idée … ou même si cela sera réalisable dans une database avec plus de 1000 loggings.

Fondamentalement, l'interaction que je veux avoir est quand (dans un bureau ou quelque chose) Tom dit à Sally "Ce nom était quelque chose comme Rebekkah Schwartzkopff " et il peut être recherché phonétiquement pour un match flou.

Évidemment, nous allons rencontrer des problèmes avec des sociétés non-anglophones à cause de soudnex, mais je suis prêt à faire des compromis sur celui-ci.

Je voudrais faire cela sans rien append à la database, ou une procédure stockée.

Question très intéressante J'ai un peu fouiné et j'ai trouvé ceci:

http://www.codeproject.com/KB/database/dmetaphone4.aspx

Je ne l'ai pas testé moi-même mais il semble que ça vaut le coup de vérifier.

Il faudrait que vous ajoutiez quelque chose à la database, mais je ne vois pas comment vous pouvez implémenter la fonctionnalité que vous voulez avec la fonctionnalité embeddede de SQL Server …

Si SOUNDEX est un bon début pour ce que vous faites, vous pouvez utiliser DIFFERENCE .

par exemple:

 SELECT * FROM Person WHERE DIFFERENCE(Person.FirstName, 'George') >= 3 

Notez que la fonction DIFFERENCE renvoie la différence entre les valeurs SOUNDEX de deux strings en utilisant une valeur de 0-4; 4 signifiant que les cordes sont assez proches de la même chose et 0 signifiant qu'elles sont complètement différentes (une sorte d'échelle arrière pour moi, mais je suppose que cela fonctionne).