Help:CirrusSearch/Mantıksal operatörler
Not: Bu sayfayı düzenlerken katkınızı CC0 altında yayınlamayı kabul edersiniz. Daha fazla bilgi için Kamu Malı Yardım Sayfalarına bakın. |
AND
ve OR
mantıksal operatörleri, eğer hiç değilse, büyük bir dikkatle kullanılmalıdır.
Olumsuzluk ve parantezler
CirrusSearch, olumsuzlamayı göstermenin birkaç yolunu destekler.
Aşağıdaki sorguların tümü eşdeğerdir: -dog
(eksi işareti), !dog
(ünlem işareti) ve NOT dog
(NOT
operatörü).
CirrusSearch parantezleri desteklemez ve sorgudan kaldırılır.
<span id="Lucene,_MUST
,_and_SHOULD
">
Lucene, MUST
ve SHOULD
CirrusSearch, sırasıyla Lucene üzerine inşa edilen Elasticsearch üzerine oluşturulmuştur.
Lucene uygulamamız klasik boole AND
veya OR
operatörlerini desteklemiyor, ancak bu anahtar kelimeleri ikili işlem olarak sunuyor.
Bunun yerine, Lucene AND
ve OR
ile farklı bir formalizme dönüştürür. tekli MUST
ve SHOULD
operatörleri bazen beklenen boole sonuçlarını taklit eden, ancak aynı zamanda onlardan çok farklı olabilen sonuçlar verir.
(CirrusSearch'ün şu anda kullanıcı sorgularında MUST
veya SHOULD
operatörlerini desteklemediğini unutmayın.
Burada yalnızca Lucene'nin iç işleyişini göstermek için kullanılırlar.)
Lucene'de MUST
, bir arama teriminin gerekli olduğunu ve herhangi bir sonuçta bulunması gerektiğini belirtir.
Dolayısıyla, MUST dog
gibi bir sorgu yalnızca içinde dog bir biçimini içeren sonuçları döndürür (bunun aynı zamanda yalnızca dog
aramasıyla eşdeğer olacağını unutmayın).
Öte yandan, SHOULD
terimler isteğe bağlıdır ancak mümkünse mevcut olmalıdır; kesinlikle gerekli olmamakla birlikte, sıralamayı etkilerler.
Dolayısıyla, MUST dog SHOULD cat
her sonuç için dog gerektirir, ancak genellikle cat;içerenleri daha iyi eşleşmeler olarak sıralar.
SHOULD
koşulların isteğe bağlı olmasının bir istisnası, sıfır MUST
terim varsa, o zaman her sonuçta en az bir SHOULD
terimin mevcut olmasıdır.
Bu nedenle, SHOULD dog SHOULD cat SHOULD fish
gerçekte dog, cat veya fish üzerinden en az birine sahip sonuçlar verecektir. Ancak üçü birden içeren herhangi bir sonuç genellikle daha üst sıralarda yer alacaktır.
Klasik boole araması genellikle örtük bir AND
ile sahiptir, yani aralarında açık bir boole operatörü olmayan tüm sorgu terimlerinin aralarında AND
olduğu varsayılır.
Lucene'de, açık bir MUST
veya SHOULD
olmayan herhangi bir sorgu terimine, kendisine örtülü bir MUST
uygulandığı varsayılır.
<span id="Converting_AND
_and_OR
">
AND
ve OR
dönüştürmek
Lucene, bazen beklenen sonuçları verecek şekilde AND
ve OR
ile MUST
ve SHOULD
ile dönüştürür, ancak çoğu zaman çok beklenmedik sonuçlara yol açar.
Lucene, AND
ile karşılaştığında, AND
değerden önceki ve sonraki şartlara MUST
uygular.
OR
ile karşılaştığında, OR
değerden önceki ve sonraki şartlara SHOULD
uygular.
Sorgu soldan sağa doğru işlenir ve daha sonra AND
veya OR
operatörleri öncekileri geçersiz kılar (aşağıdaki örneklere bakın).
Bu, etkin bir şekilde operatörlere alışılmadık bir "geriye doğru sıralama önceliği" verir ve sonuçlar, klasik mantıksal aramaya kıyasla oldukça beklenmedik olabilir.
Yanlış giden örnekler
Aşağıda, AND
/OR
ile MUST
/SHOULD
dönüşümün klasik boole operatörlerinin beklentilerinden farklı sonuçlar verdiği bazı çalışılmış örnekler verilmiştir.
blue OR red AND green
OR
ileSHOULD
dönüştürmeden önce ve sonra:
SHOULD blue SHOULD red AND green
AND
önce ve sonraMUST
çevirerek (bu durumda önceden uygulananSHOULD
geçersiz kılarak):
SHOULD blue MUST red MUST green
- Sonuç kümesi bu nedenle
red green
ile aynıdır,blue
isteğe bağlıdır (ve yalnızca sıralamayı etkiler).
- Sonuç kümesi bu nedenle
blue OR red green
OR
ileSHOULD
dönüştürmeden önce ve sonra:
SHOULD blue SHOULD red green
- açıkça
MUST
veyaSHOULD
olmadan herhangi bir terime örtük birMUST
uygulayarak:
- açıkça
SHOULD blue SHOULD red MUST green
- Örtülü
AND
olan klasik bir boole sisteminde,blue OR red AND green
veblue OR red green
aynı olmasını bekleriz, ancak farkı görmek için bunu yukarıdaki örnekle karşılaştırırız. Burada yalnızcagreen
gereklidir, yukarıda hemred
hem degreen
gereklidir.
- Örtülü
blue AND red OR green
AND
ileMUST
dönüştürmeden önce ve sonra:
MUST blue MUST red OR green
OR
ileSHOULD
dönüştürmeden önce ve sonra:
MUST blue SHOULD red SHOULD green
- Sonuç kümesi, yalnızca
red
vegreen
ile sıralamayı etkilemekle birlikte basitçeblue
aramakla aynıdır. Bu aynı zamanda, içindered
veyagreen
olan sıfır belge varsa,blue AND red OR green
için arama sonuçlarıyla yalnızcablue
aradığınızla aynı sonuçları alacağınız anlamına gelir; bu, klasik bir boole sisteminden beklediğiniz gibi değildir.
- Sonuç kümesi, yalnızca
Genel olarak, bir sorguda örtük AND
dahil olmak üzere OR
ile AND
karıştırmak, klasik bir boole çerçevesinde sezgisel olmayan sonuçlar verir.
Ayrıca, sorgu terimlerinizin her bir olası pozitif ve negatif kombinasyonunu tam olarak kaç belgenin içerdiğini tam olarak bilmiyorsanız, boole mantığının ters gittiği bu durumları tespit etmek çok zor olabilir.
Yaygın kullanım örnekleri
Açık operatörünüz yoksa, boole varsayılanı AND
ve Lucene varsayılanı MUST
; bu, sorguda bulunan tek operatörler ise eşdeğerdir:
blue red green
— kullanıcı amacı: her üç terim de herhangi bir sonuçta mevcut olmalıdırblue AND red AND green
— açık klasik boole sorgusu: her üç terim de herhangi bir sonuçta mevcut olmalıdırMUST blue MUST red MUST green
— Lucene yorumu: her üç terim de herhangi bir sonuçta mevcut olmalıdır
Bununla birlikte, MUST
örtük olduğundan, AND
kullanılarak açık hâle getirilerek, daha sonraki boole kafa karışıklığı potansiyeli dışında hiçbir şey kazanılmaz.
Sorgudaki tek operatör OR
ise, en önemlisi örtük AND
olmadığı anlamına gelir, bu durumda SHOULD
ile sahip olan her şeyle aynıdır (bir sorguda SHOULD
terimleri varsa ancak MUST
terimleri yoksa, en azından SHOULD
şartlardan biri herhangi bir sonuçta yer alacaktır):
blue OR red OR green
— klasik boole sorgusu: herhangi bir sonuçta üç terimden en az biri bulunmalıdırSHOULD blue SHOULD red SHOULD green
— Lucene yorumu: herhangi bir sonuçta üç terimden en az biri bulunmalıdır
Örtülü AND
/MUST
ile çok dikkatli olun!
Yukarıdaki örnekte, blue OR red green
, green
ile uygulanan örtük MUST
, sonuçlarda ne blue
ne de red
kesinlikle gerekli olmadığı anlamına gelir.
Booleler, anahtar kelimeler ve önekler
AND
ve OR
, özel anahtar kelimelerle (insource:
veya hastemplate:
gibi) veya ad alanlarıyla (Talk:
veya User:
gibi) tahmin edilebileceği gibi etkileşime girmez ve muhtemelen ikisiyle birlikte kullanılmamalıdır.
Gelecek planları
Elbette Arama Platformu ekibi bu durumdan pek memnun değil.
Kısa vadede bu belgeyi oluşturuyor ve mevcut sistemimizin gerçekliğini yansıtmak için Help:CirrusSearch belgeleri güncelliyoruz.
Daha uzun vadede, CirrusSearch'te, parantezler için uygun destek de dahil olmak üzere, belirli bir klasik boole sorgusuna eşdeğer bir Lucene MUST
/SHOULD
sorgusunu düzgün bir şekilde oluşturacak ve beklenen sonuçları döndürecek yeni bir katman uygulamayı planlıyoruz.
(Lucene'de sorgu terimlerinin veya cümleciklerinin en az birinin eşleşmesi gerektiğini belirtmek mümkündür, bu da bir boolean OR
ile eşdeğerdir; terimler veya tümceler eşleşmesi, AND
boole değeri ile aynıdır.)
Bunun ötesinde, MUST
ve SHOULD
operatörlerini, muhtemelen bu belgede gösterilen tekli sözdizimini kullanarak, ancak muhtemelen henüz belirlenmemiş başka bir sözdizimi kullanarak da açık hâle getirebiliriz.
Daha fazla okuma
- BooleanQuerySyntax — Sorunla ilgili olarak 2005 yılına kadar uzanan bir posta listesi tartışmasının özeti, sorunla ilgili 2003 tarihli bir hata raporuna bağlantı. (2003 hatası 2009'da kapatıldı ve boolean sorgularla doğru şeyi yapan farklı bir Lucene sorgu ayrıştırıcısı olduğunu iddia ediyor, ancak CirrusSearch'te buna erişimimiz yok.)