Başlangıç ​​yerine bir dizenin ortasını aradığınızda buna ne denir?


19

Geliştiricilerimle daha iyi iletişim kurmak için kelime dağarcığımı cilalamaya çalışıyorum. Biz başından beri bir dize aramak gerekir eğer biz tartışıyor sitedeki birkaç yerde var 'running%'dizede her yerde vs '%running%.

Ben bulanık " run", "runing" [sic], "runed" [sic] kelimesinin şeklini değiştirmek anlamına gelir yanlış olduğunu fark ben orta arama "bulanık" çağırıyor .

Bir dizenin başını aramak ve dizenin ortasını aramak için doğru terminoloji nedir?


1
Bu iki seçeneği birbirinden ayırmak için "Şununla başlar" ve "İçerir" kullanılan yerlerde çalıştım.
Solomon Rutzky

Yanıtlar:


24

Buna "sabit olmayan arama modeli" denir ve SQL'de buna benzer.

foo LIKE '%bar%'

Her %iki tarafta da a yoksa , arama deseninin dizenin başına veya sonuna sabitlendiği söylenir . Bu lingo normal dünyadan geliyor.

foo LIKE 'bar%'

" bar%Dizenin başlangıcına bağlı arama deseni" diyeceksiniz .

Karşılaştırma için, bir PCRE ile sabitlenir ^veya $jeton ve bu gibi görünüyor ^barya bar$. PCRE'ler belirteçlerle açık bağlantı gerektirirken SQL LIKEifadeleri dolaylı olarak bağlantılıdır ve "bağlantısız arama kalıbı"% oluşturmak için açıktır .

Yan not olarak, PostgreSQL'de olduğu gibi bir şey kullanarak bu tür ifadeleri trigramlarla dizine ekleyebilirsinizpg_trgm


1

Aklıma ilk gelen şey " Unutulmaz ". Dizine alınmış bir alanda belirli bir dizeyi veya dizenin ilk bölümünü aramak, aramanıza olanak tanır. Aramanız bir joker karakterle başlıyorsa, RDBMS'nin tüm dizini taraması gerekir, çünkü arama yükleminize uyan değerler değer kümesinin herhangi bir yerinde görünebilir.

Bir telefon defterine bakmayı düşünün (bunları hatırlayacak kadar yaşlıysanız ...). Soyadı "Dan" ile başlayan insanları kolayca bulabilirsiniz: D'lere parmak basıyorsunuz, DA'lara yöneliyorsunuz ve DAN-şeyleri hep birlikte olacak. Soyadı "ANIEL" dizesini içeren kişileri bulmak isterseniz, her sayfayı okumak zorundasınız (tabloyu tarayın).


2
"RDBMS'nin tüm dizini taraması gerekecek" bu doğru değil. postgresql.org/docs/9.6/static/pgtrgm.html
Evan Carroll

Tartışmasız, burada arandığından daha genel bir terim olabileceğini düşünüyorum, çünkü bir dizi diğer vakayı kapsamaktadır (örneğin, bir sütunda gerçekleştirilen bir fonksiyonun sonucunu arıyor).
David Spillett

0

Bu gerçekten senin sorunun değil, ama bulanık örneğin kesin değil.

  • Bulanık keskin, ikilinin tersidir , yani eşleşme yüzdesine sahip olabilirsiniz, örneğin 'run'hassas bir şekilde bulanık bir arama. 5 'ran', 'rud' ve diğer birçok kelimeyi içerir. SQL gelmez değil bulanık arama desteği, sen Lucene gibi ek sistemler ihtiyacımız var.
  • Bir joker için irade aramak 'run%'her zaman 'runed' 'koşuyoruz' ve içerecektir ve ayırt edebilir ile başlar ve içerdiği ( '%run%'@ gibi 'outrunning' içerecek şekilde) Solomon Rutzky anlaşılacağı
  • Bununla birlikte , örneğin metin bloklarında tüm kelimeleri bulmak istiyorsanız , önceki veya sondaki boşlukları belirtmeniz ' run '(veya ' run% ''bla bla runing bla' ve 'bla runed bla bla' gibi kısmi eşleşmeleri dahil etmeniz) gerekir.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.