Help:CirrusSearch/Mantıksal operatörler

From mediawiki.org
This page is a translated version of the page Help:CirrusSearch/Logical operators and the translation is 100% complete.
Other languages:
CirrusSearch şu anda klasik boole aramasını desteklemiyor ve 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.

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.

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 ile SHOULD dönüştürmeden önce ve sonra:
  • SHOULD blue SHOULD red AND green
    • AND önce ve sonra MUST çevirerek (bu durumda önceden uygulanan SHOULD 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).

  • blue OR red green
    • OR ile SHOULD dönüştürmeden önce ve sonra:
  • SHOULD blue SHOULD red green
    • açıkça MUST veya SHOULD olmadan herhangi bir terime örtük bir MUST uygulayarak:
  • SHOULD blue SHOULD red MUST green
    • Örtülü AND olan klasik bir boole sisteminde, blue OR red AND green ve blue 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ızca green gereklidir, yukarıda hem red hem de green gereklidir.

  • blue AND red OR green
    • AND ile MUST dönüştürmeden önce ve sonra:
  • MUST blue MUST red OR green
    • OR ile SHOULD dönüştürmeden önce ve sonra:
  • MUST blue SHOULD red SHOULD green
    • Sonuç kümesi, yalnızca red ve green ile sıralamayı etkilemekle birlikte basitçe blue aramakla aynıdır. Bu aynı zamanda, içinde red veya green olan sıfır belge varsa, blue AND red OR green için arama sonuçlarıyla yalnızca blue aradığınızla aynı sonuçları alacağınız anlamına gelir; bu, klasik bir boole sisteminden beklediğiniz gibi değildir.

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ır
  • blue AND red AND green — açık klasik boole sorgusu: her üç terim de herhangi bir sonuçta mevcut olmalıdır
  • MUST 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ır
  • SHOULD 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.)