Ich versuche mein Vokabular zu verbessern, um besser mit meinen Mitentwicklern kommunizieren zu können. Wir haben mehrere Stellen auf der Website, an denen wir überlegen, ob wir von Anfang an nach einer Zeichenfolge suchen sollen, 'running%'
anstatt irgendwo in der Zeichenfolge '%running%
.
Ich habe die mittlere Suche "Fuzzy" genannt, was meines Erachtens falsch ist, da Fuzzy bedeutet, die Form des Wortes "run", "runing" [sic], "runed" [sic] zu ändern.
Was ist die richtige Terminologie, um den Anfang einer Zeichenfolge und die Mitte einer Zeichenfolge zu durchsuchen?
terminology
regex
string-searching
danielson317
quelle
quelle
Antworten:
Es wird als "nicht verankertes Suchmuster" bezeichnet und sieht in SQL so aus.
Fehlt
%
auf beiden Seiten ein, wird gesagt, dass das Suchmuster am Anfang bzw. Ende der Zeichenfolge verankert ist . Dieser Jargon stammt aus der Regex-Welt.Sie würden sagen, "das Suchmuster
bar%
am Anfang der Zeichenfolge verankert ".Zum Vergleich ist eine PCRE mit
^
oder$
Tokens verankert und sieht aus wie^bar
oderbar$
. PCREs erfordern eine explizite Verankerung mit Token, während SQL-LIKE
Anweisungen implizit verankert sind und explizit%
die Erstellung eines "nicht verankerten Suchmusters" erfordern .Nebenbei bemerkt, Sie können diese Arten von Ausdrücken mit Trigrammen indizieren, indem Sie so etwas wie
pg_trgm
in PostgreSQL verwendenquelle
Das erste, was mir in den Sinn kommt, ist " unsagbar ". Durch die Suche nach einer bestimmten Zeichenfolge oder dem ersten Teil einer Zeichenfolge in einem indizierten Feld können Sie suchen. Wenn Ihre Suche mit einem Platzhalter beginnt, muss das RDBMS den gesamten Index durchsuchen, da Werte, die Ihrem Suchprädikat entsprechen, an einer beliebigen Stelle in der Wertemenge angezeigt werden können.
Betrachten Sie ein Telefonbuch (wenn Sie alt genug sind, um sich an diese zu erinnern ...). Sie können leicht Leute finden, deren Nachnamen mit "Dan" beginnen: Sie blättern mit dem Daumen zum Ds, blättern vorwärts zu den DAs, und die DAN-Dinge werden alle zusammen sein. Wenn Sie nach Personen suchen möchten, deren Nachnamen die Zeichenfolge "ANIEL" enthalten, müssen Sie jede Seite lesen (die Tabelle scannen).
quelle
Es ist nicht wirklich Ihre Frage, aber Ihr Beispiel für Fuzzy ist ungenau.
'run'
mit einer Genauigkeit von 0,5 umfasst beispielsweise "ran", "rud" und viele andere Wörter. SQL unterstützt keine Fuzzy-Suche, Sie benötigen zusätzliche Systeme wie Lucene.'run%'
immer 'runing' und 'runed' beinhalten, und Sie können unterscheiden, mit wie @ Solomon Rutzky vorschlägt, und enthält ('%run%'
um 'outrunning' einzuschließen)' run '
(oder' run% '
teilweise Übereinstimmungen wie "bla bla runing bla" und "bla runed bla bla" einschließen).quelle