Saya mencoba memoles kosakata saya untuk berkomunikasi lebih baik dengan sesama pengembang. Kami memiliki beberapa tempat di situs tempat kami berdebat jika kami harus mencari string dari awal 'running%'
vs di mana pun di string'%running%
.
Saya telah memanggil pencarian tengah "fuzzy" yang saya sadari salah karena fuzzy berarti mengubah bentuk kata "run", "runing" [sic], "runed" [sic].
Apa terminologi yang benar untuk mencari awal string dan mencari tengah string?
terminology
regex
string-searching
danielson317
sumber
sumber
Jawaban:
Ini disebut "pola pencarian tidak berlabuh" , dan sepertinya ini di SQL.
Jika Anda tidak memiliki
%
di kedua sisi, dikatakan bahwa pola pencarian masing-masing jangkar ke awal atau akhir string. Kata ini berasal dari dunia regex.Anda akan mengatakan, "pola pencarian
bar%
berlabuh ke awal string ".Sebagai perbandingan, PCRE berlabuh dengan
^
atau$
token dan sepertinya^bar
ataubar$
. PCRE membutuhkan penahan eksplisit dengan token, sedangkanLIKE
pernyataan SQL secara implisit berlabuh dan membutuhkan eksplisit%
untuk membuat "pola pencarian tidak berlabuh" .Sebagai catatan tambahan, Anda dapat mengindeks jenis ekspresi ini dengan trigram menggunakan sesuatu seperti
pg_trgm
di PostgreSQLsumber
Hal pertama yang terlintas dalam pikiran saya adalah "tidak dapat ditawar ". Mencari string tertentu, atau bagian pertama dari string, dalam bidang yang diindeks memungkinkan Anda untuk mencari. Jika pencarian Anda dimulai dengan wildcard, RDBMS harus memindai seluruh indeks, karena nilai-nilai yang memenuhi predikat pencarian Anda dapat muncul di mana saja di set nilai.
Pertimbangkan mencari di buku telepon (jika Anda cukup tua untuk mengingatnya ...). Anda dapat dengan mudah menemukan orang-orang yang nama belakangnya dimulai dengan "Dan:" Anda melihat-lihat Ds, beralih ke DA, dan DAN-sesuatu akan bersama-sama. Jika Anda ingin menemukan orang yang nama belakangnya menyertakan string "ANIEL," Anda harus membaca setiap halaman (pindai tabel).
sumber
Ini sebenarnya bukan pertanyaan Anda, tetapi contoh fuzzy Anda tidak tepat.
'run'
pada presisi .5 akan mencakup 'ran', 'rud', dan banyak kata lain. SQL tidak mendukung pencarian fuzzy, Anda memerlukan sistem tambahan seperti Lucene.'run%'
akan selalu menyertakan 'runing' dan 'runed', dan Anda dapat membedakan dimulai dengan dan mengandung ('%run%'
untuk memasukkan 'kehabisan') sebagai @ Solomon Rutzky menyarankan' run '
(atau' run% '
untuk memasukkan kecocokan sebagian seperti 'bla bla runing bla' dan 'bla runed bla bla').sumber