Estou tentando aprimorar meu vocabulário para me comunicar melhor com meus colegas desenvolvedores. Temos vários lugares no site em que estamos debatendo se devemos procurar uma string desde o início ou 'running%'
em qualquer lugar da string '%running%
.
Eu chamo a pesquisa do meio de "difusa", que percebo incorreta, pois difusa significa alterar a forma da palavra "executar", "executar" [sic], "runed" [sic].
Qual é a terminologia correta para pesquisar no início de uma string e pesquisar no meio de uma string?
terminology
regex
string-searching
danielson317
fonte
fonte
Respostas:
Ele é chamado de "padrão de pesquisa não ancorado" e se parece com isso no SQL.
Se você não tiver um
%
dos dois lados, diz-se que o padrão de pesquisa é ancorado no início ou no final da sequência, respectivamente. Este jargão vem do mundo regex.Você diria "o padrão de pesquisa
bar%
ancorado no início da string ".Para comparação, um PCRE é ancorado com
^
ou$
tokens e parece com^bar
oubar$
. Os PCREs requerem ancoragem explícita com tokens, enquanto asLIKE
instruções SQL são implicitamente ancoradas e exigem explícito%
para criar um "padrão de pesquisa não ancorado" .Como uma observação lateral, você pode indexar esses tipos de expressões com trigramas usando algo como
pg_trgm
no PostgreSQLfonte
A primeira coisa que me vem à mente é " intransigível ". A pesquisa de uma sequência específica, ou a primeira parte de uma sequência, em um campo indexado permite procurar. Se a sua pesquisa começar com um curinga, o RDBMS terá que varrer o índice inteiro, pois os valores que atendem ao seu predicado de pesquisa podem aparecer em qualquer lugar do conjunto de valores.
Considere procurar em uma lista telefônica (se você tiver idade suficiente para se lembrar daquelas ...). Você pode encontrar facilmente as pessoas cujo sobrenome começa com "Dan": você aperta o dedo para os Ds, avança para os DAs e os DAN-algo estão todos juntos. Se você quiser encontrar pessoas com sobrenome, inclua a string "ANIEL", precisará ler todas as páginas (verifique a tabela).
fonte
Não é realmente sua pergunta, mas seu exemplo de impreciso é impreciso.
'run'
precisão 0,5 inclui 'ran', 'rud' e muitas outras palavras. O SQL não suporta pesquisa difusa, você precisa de sistemas adicionais como o Lucene.'run%'
sempre incluirá 'runing' e 'runed', e você pode distinguir o que começa e o contém ('%run%'
para incluir o 'outrunning'), como sugere Solomon Rutzky' run '
(ou' run% '
incluir correspondências parciais como 'bla bla runing bla' e 'bla runed bla bla').fonte