Wie heißt es, wenn Sie die Mitte eines Strings anstelle des Anfangs durchsuchen?


19

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?


1
Ich habe an Stellen gearbeitet, an denen "Beginnt mit" vs "Enthält" verwendet wurde, um zwischen diesen beiden Optionen zu unterscheiden.
Solomon Rutzky

Antworten:


24

Es wird als "nicht verankertes Suchmuster" bezeichnet und sieht in SQL so aus.

foo LIKE '%bar%'

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.

foo LIKE 'bar%'

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 ^baroder bar$. PCREs erfordern eine explizite Verankerung mit Token, während SQL- LIKEAnweisungen 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_trgmin PostgreSQL verwenden


1

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).


2
"RDBMS muss den gesamten Index durchsuchen", das stimmt so nicht. postgresql.org/docs/9.6/static/pgtrgm.html
Evan Carroll

Ich denke, Unargable könnte ein allgemeinerer Begriff sein, als er hier gesucht wird, da er eine Reihe anderer Fälle abdeckt (z. B. das Ergebnis einer auf einer Spalte ausgeführten Funktion suchen).
David Spillett

0

Es ist nicht wirklich Ihre Frage, aber Ihr Beispiel für Fuzzy ist ungenau.

  • Fuzzy ist das Gegenteil von scharf und binär. Dies bedeutet, dass Sie einen bestimmten Prozentsatz der Übereinstimmung haben können. Eine Fuzzy-Suche '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.
  • Eine Wildcard- Suche wird für '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)
  • Wenn Sie jedoch nach ganzen Wörtern suchen möchten , beispielsweise in Textblöcken, müssen Sie das vorangestellte oder nachfolgende Leerzeichen angeben ' run '(oder ' run% 'teilweise Übereinstimmungen wie "bla bla runing bla" und "bla runed bla bla" einschließen).
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.