Próbuję dopracować swoje słownictwo, aby lepiej komunikować się z innymi programistami. Mamy kilka miejsc na stronie, w których debatujemy, czy powinniśmy wyszukać ciąg od początku, 'running%'
a nie gdziekolwiek w ciągu '%running%
.
Nazwałam środkowe wyszukiwanie „rozmytym”, które zdaję sobie sprawę, że jest niepoprawne, ponieważ rozmyte oznacza zmianę formy słowa „biegać”, „biegać” [sic], „biegać” [sic].
Jaka jest prawidłowa terminologia wyszukiwania początku łańcucha i przeszukiwania jego środka?
terminology
regex
string-searching
danielson317
źródło
źródło
Odpowiedzi:
Nazywa się to „nie zakotwiczonym wzorcem wyszukiwania” i wygląda tak w SQL.
Jeśli brakuje jednej
%
lub drugiej strony, mówi się, że wzór wyszukiwania zakotwicza odpowiednio na początku lub na końcu łańcucha. Ten żargon pochodzi ze świata wyrażeń regularnych.Powiedziałbyś: „wzorzec wyszukiwania
bar%
zakotwiczony na początku ciągu ”.Dla porównania, PCRE jest zakotwiczony z
^
lub$
tokenami i wygląda jak^bar
lubbar$
. PCRE wymagają jawnego zakotwiczenia za pomocą tokenów, natomiastLIKE
instrukcje SQL są niejawnie zakotwiczone i wymagają jawnego zakotwiczenia w%
celu utworzenia „wzorca wyszukiwania bez zakotwiczenia” .Na marginesie możesz indeksować tego rodzaju wyrażenia za pomocą trygramów, używając czegoś takiego jak
pg_trgm
w PostgreSQLźródło
Pierwszą rzeczą, jaka przychodzi mi na myśl, jest „ niewymienny ”. Wyszukiwanie określonego ciągu lub pierwszej części ciągu w polu indeksowanym umożliwia wyszukiwanie. Jeśli wyszukiwanie zaczyna się od znaku wieloznacznego, RDBMS będzie musiał przeskanować cały indeks, ponieważ wartości spełniające predykat wyszukiwania mogą pojawić się w dowolnym miejscu w zestawie wartości.
Zastanów się, czy nie zajrzeć do książki telefonicznej (jeśli jesteś wystarczająco dorosły, aby je zapamiętać ...). Możesz łatwo znaleźć ludzi, których nazwiska zaczynają się od „Dan:”, kciuka do D, odwracania do DA, a DAN-coś będzie razem. Jeśli chcesz znaleźć osoby, których nazwiska zawierają ciąg „ANIEL”, musisz przeczytać każdą stronę (zeskanować tabelę).
źródło
To nie jest tak naprawdę twoje pytanie, ale twój przykład rozmytych jest nieprecyzyjny.
'run'
dokładnością .5 będzie zawierać „bieg”, „rud” i wiele innych słów. SQL nie obsługuje wyszukiwania rozmytego, potrzebujesz dodatkowych systemów, takich jak Lucene.'run%'
zawsze będzie zawierać „runiczny” i „runed” i można odróżnić zaczyna i zawiera ('%run%'
w celu włączenia „outrunning”) jako @ Salomon Rutzky sugeruje' run '
(lub' run% '
dołączyć dopasowania częściowe, takie jak „bla bla runing bla” i „bla runed bla bla”).źródło