Я пытаюсь пополнить свой словарный запас, чтобы лучше общаться с коллегами-разработчиками. У нас есть несколько мест на сайте, где мы обсуждаем, нужно ли искать строку с начала и 'running%'
против где-либо в строке '%running%
.
Я называю средний поиск «нечетким», который, как я понимаю, неверен, поскольку нечеткий означает изменение формы слова «беги», «беги» [sic], «беги» [sic].
Какова правильная терминология для поиска в начале строки и поиска в середине строки?
terminology
regex
string-searching
danielson317
источник
источник
Ответы:
Это называется «шаблон поиска без привязки» и выглядит так в SQL.
Если вам не хватает ни
%
одной из сторон, говорят, что шаблон поиска привязывает к началу или концу строки соответственно. Этот жаргон встречается в мире регулярных выражений.Вы бы сказали, «шаблон поиска
bar%
привязан к началу строки ».Для сравнения, PCRE привязан токенами
^
или$
токенами и выглядит как^bar
илиbar$
. PCRE требуют явной привязки с токенами, тогда как операторы SQLLIKE
неявно привязаны и требуют явного%
создания «не привязанного шаблона поиска» .Как примечание, вы можете индексировать эти типы выражений с помощью триграмм, используя что-то вроде
pg_trgm
PostgreSQLисточник
Первое, что приходит мне в голову, - это ». Поиск определенной строки или первой части строки в индексированном поле позволяет выполнять поиск. Если ваш поиск начинается с подстановочного знака, СУБД придется сканировать весь индекс, потому что значения, соответствующие вашему предикату поиска, могут появляться в любом месте набора значений.
Подумайте о том, чтобы заглянуть в телефонную книгу (если вы достаточно взрослые, чтобы помнить это ...). Вы можете легко найти людей, чьи фамилии начинаются с «Дэн»: вы нажимаете на «Д», переворачиваете на «ДА», и ДАН-что-то будет все вместе. Если вы хотите найти людей, фамилии которых включают в себя строку «ANIEL», вам придется прочитать каждую страницу (отсканировать таблицу).
источник
Это не совсем твой вопрос, но твой пример нечеткости неточен.
'run'
с точностью до .5 будет включать «run», «rud» и многие другие слова. SQL не поддерживает нечеткий поиск, вам нужны дополнительные системы, такие как Lucene.'run%'
всегда будет включать в себя «подножке» и «рунический», и вы можете отличить начинается и содержит ('%run%'
включить «опережающий») , как @ Соломон Rutzky предлагает' run '
(или' run% '
включить частичные совпадения, такие как «bla bla runing bla» и «bla runed bla bla»).источник