J'essaie de peaufiner mon vocabulaire pour mieux communiquer avec mes collègues développeurs. Nous avons plusieurs endroits sur le site où nous discutons si nous devons rechercher une chaîne depuis le début 'running%'
vs n'importe où dans la chaîne '%running%
.
J'ai appelé la recherche du milieu "floue", ce qui, je le réalise, est incorrect car flou signifie changer la forme du mot "run", "runing" [sic], "runed" [sic].
Quelle est la terminologie correcte pour rechercher le début d'une chaîne et rechercher le milieu d'une chaîne?
terminology
regex
string-searching
danielson317
la source
la source
Réponses:
Cela s'appelle un "modèle de recherche non ancré" , et il ressemble à ceci dans SQL.
Si vous manquez d'un
%
côté ou de l'autre, il est dit que le motif de recherche s'ancre respectivement au début ou à la fin de la chaîne. Ce jargon vient du monde regex.Vous diriez, "le modèle de recherche
bar%
ancré au début de la chaîne ".A titre de comparaison, un PCRE est ancré avec
^
ou des$
jetons et il ressemble à^bar
oubar$
. Les PCRE nécessitent un ancrage explicite avec des jetons, tandis que lesLIKE
instructions SQL sont implicitement ancrées et nécessitent explicitement%
de créer un "modèle de recherche non ancré" .En remarque, vous pouvez indexer ces types d'expressions avec des trigrammes en utilisant quelque chose comme
pg_trgm
dans PostgreSQLla source
La première chose qui me vient à l'esprit est « inconcevable ». La recherche d'une chaîne spécifique, ou de la première partie d'une chaîne, dans un champ indexé vous permet de rechercher. Si votre recherche commence par un caractère générique, le SGBDR devra analyser l'intégralité de l'index, car les valeurs qui correspondent à votre prédicat de recherche peuvent apparaître n'importe où dans l'ensemble de valeurs.
Pensez à regarder dans un annuaire téléphonique (si vous êtes assez vieux pour vous en souvenir ...). Vous pouvez facilement trouver des personnes dont le nom de famille commence par «Dan:» vous faites un pouce vers les D, vous retournez vers les DA, et les quelque chose de DAN seront tous ensemble. Si vous souhaitez trouver des personnes dont le nom de famille inclut la chaîne "ANIEL", vous devez lire chaque page (scannez le tableau).
la source
Ce n'est pas vraiment votre question, mais votre exemple de flou est imprécis.
'run'
précision de 0,5 inclura «ran», «rud» et beaucoup d'autres mots. SQL ne prend pas en charge la recherche floue, vous avez besoin de systèmes supplémentaires comme Lucene.'run%'
comprendra toujours «runing» et «runed», et vous pouvez distinguer le début par et contient ('%run%'
pour inclure «outrunning») comme le suggère @ Solomon Rutzky' run '
(ou' run% '
inclure des correspondances partielles telles que `` bla bla runing bla '' et `` bla runed bla bla '').la source