Come si chiama quando cerchi il centro di una stringa anziché l'inizio?


19

Sto cercando di perfezionare il mio vocabolario per comunicare meglio con i miei colleghi sviluppatori. Abbiamo diversi punti nel sito in cui stiamo discutendo se dovremmo cercare una stringa dall'inizio 'running%'contro qualsiasi punto della stringa '%running%.

Ho chiamato la ricerca intermedia "fuzzy" che mi rendo conto che è errata poiché fuzzy significa cambiare la forma della parola "run", "runing" [sic], "runed" [sic].

Qual è la terminologia corretta per cercare l'inizio di una stringa e cercare il centro di una stringa?


1
Ho lavorato in luoghi che utilizzavano "Inizia con" vs "Contiene" per distinguere tra queste due opzioni.
Solomon Rutzky,

Risposte:


24

Si chiama "modello di ricerca non ancorato" e si presenta così in SQL.

foo LIKE '%bar%'

Se manca uno %su entrambi i lati, si dice che il modello di ricerca si ancori rispettivamente all'inizio o alla fine della stringa. Questo gergo viene dal mondo regex.

foo LIKE 'bar%'

Diresti "il modello di ricerca bar%ancorato all'inizio della stringa ".

Per fare un confronto, un PCRE è ancorato con ^o $token e sembra ^baro bar$. I PCRE richiedono l'ancoraggio esplicito con i token, mentre le LIKEistruzioni SQL sono implicitamente ancorate e richiedono esplicito %di creare un "modello di ricerca non ancorato" .

Come nota a margine, puoi indicizzare questi tipi di espressioni con i trigrammi usando qualcosa come pg_trgmPostgreSQL


1

La prima cosa che mi viene in mente è "non rilevabile ". La ricerca di una stringa specifica, o della prima parte di una stringa, in un campo indicizzato consente di cercare. Se la ricerca inizia con un carattere jolly, RDBMS dovrà eseguire la scansione dell'intero indice, poiché i valori che soddisfano il predicato della ricerca potrebbero apparire in qualsiasi punto dell'insieme di valori.

Considera di cercare in un elenco telefonico (se sei abbastanza grande da ricordare quelli ...). Puoi facilmente trovare persone i cui cognomi iniziano con "Dan:" muovi il pollice verso il D, scorri in avanti verso i DA e le cose DAN saranno tutte insieme. Se volessi trovare persone il cui cognome includa la stringa "ANIEL", dovresti leggere ogni pagina (scansiona la tabella).


2
"RDBMS dovrà scansionare l'intero indice", quindi non è vero. postgresql.org/docs/9.6/static/pgtrgm.html
Evan Carroll

Penso che un argomento non generico possa essere un termine più generale di quello che si cerca qui, poiché copre una serie di altri casi (ad esempio, la ricerca del risultato di una funzione eseguita su una colonna).
David Spillett,

0

Non è proprio la tua domanda, ma il tuo esempio di fuzzy è impreciso.

  • Fuzzy è l'opposto di sharp, binario , il che significa che puoi avere una percentuale di corrispondenza, ad esempio una ricerca fuzzy 'run'con precisione .5 includerà "ran", "rud" e molte altre parole. SQL non supporta la ricerca fuzzy, sono necessari sistemi aggiuntivi come Lucene.
  • Una ricerca con caratteri jolly'run%' includerà sempre 'runing' e 'runed', e puoi distinguere l' inizio e il contenuto ( '%run%'per includere 'outrunning') come suggerisce @ Solomon Rutzky
  • Tuttavia, se si desidera trovare parole intere , ad esempio in blocchi di testo, è necessario indicare lo spazio bianco precedente o finale ' run '(o ' run% 'includere corrispondenze parziali come "bla bla runing bla" e "bla runed bla bla").
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.