Help:CirrusSearch/Logical operators/tr

 şu anda klasik boole aramasını desteklemiyor ve  ve   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:  (eksi işareti),   (ünlem işareti) ve   (  operatörü).

CirrusSearch parantezleri desteklemez ve sorgudan kaldırılır.



Lucene, ve
CirrusSearch, sırasıyla Lucene üzerine inşa edilen Elasticsearch üzerine oluşturulmuştur. Lucene uygulamamız klasik boole  veya   operatörlerini desteklemiyor, ancak bu anahtar kelimeleri ikili işlem olarak sunuyor.

Bunun yerine, Lucene  ve   ile farklı bir formalizme dönüştürür. tekli  ve   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   veya   operatörlerini desteklemediğini unutmayın. Burada yalnızca Lucene'nin iç işleyişini göstermek için kullanılırlar.)

Lucene'de, bir arama teriminin gerekli olduğunu ve herhangi bir sonuçta bulunması gerektiğini belirtir. Dolayısıyla,  gibi bir sorgu yalnızca içinde dog bir biçimini içeren sonuçları döndürür (bunun aynı zamanda yalnızca   aramasıyla eşdeğer olacağını unutmayın).

Öte yandan,  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,  her sonuç için dog gerektirir, ancak genellikle cat;içerenleri daha iyi eşleşmeler olarak sıralar.

koşulların isteğe bağlı olmasının bir istisnası, sıfır  terim varsa, o zaman her sonuçta en az bir   terimin mevcut olmasıdır. Bu nedenle,  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  ile sahiptir, yani aralarında açık bir boole operatörü olmayan tüm sorgu terimlerinin aralarında   olduğu varsayılır. Lucene'de, açık bir  veya   olmayan herhangi bir sorgu terimine, kendisine örtülü bir   uygulandığı varsayılır.



ve dönüştürmek
Lucene, bazen beklenen sonuçları verecek şekilde  ve   ile   ve   ile dönüştürür, ancak çoğu zaman çok beklenmedik sonuçlara yol açar.

Lucene,  ile karşılaştığında,   değerden önceki ve sonraki şartlara   uygular. ile karşılaştığında,  değerden önceki ve sonraki şartlara   uygular. Sorgu soldan sağa doğru işlenir ve daha sonra  veya   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, /  ile  /  dönüşümün klasik boole operatörlerinin beklentilerinden farklı sonuçlar verdiği bazı çalışılmış örnekler verilmiştir.


 * ile  dönüştürmeden önce ve sonra:
 * önce ve sonra  çevirerek (bu durumda önceden uygulanan   geçersiz kılarak):
 * Sonuç kümesi bu nedenle  ile aynıdır,   isteğe bağlıdır (ve yalnızca sıralamayı etkiler).
 * önce ve sonra  çevirerek (bu durumda önceden uygulanan   geçersiz kılarak):
 * Sonuç kümesi bu nedenle  ile aynıdır,   isteğe bağlıdır (ve yalnızca sıralamayı etkiler).
 * Sonuç kümesi bu nedenle  ile aynıdır,   isteğe bağlıdır (ve yalnızca sıralamayı etkiler).


 * ile  dönüştürmeden önce ve sonra:
 * açıkça  veya   olmadan herhangi bir terime örtük bir   uygulayarak:
 * Örtülü  olan klasik bir boole sisteminde,   ve   aynı olmasını bekleriz, ancak farkı görmek için bunu yukarıdaki örnekle karşılaştırırız. Burada yalnızca   gereklidir, yukarıda hem   hem de   gereklidir.
 * açıkça  veya   olmadan herhangi bir terime örtük bir   uygulayarak:
 * Örtülü  olan klasik bir boole sisteminde,   ve   aynı olmasını bekleriz, ancak farkı görmek için bunu yukarıdaki örnekle karşılaştırırız. Burada yalnızca   gereklidir, yukarıda hem   hem de   gereklidir.
 * Örtülü  olan klasik bir boole sisteminde,   ve   aynı olmasını bekleriz, ancak farkı görmek için bunu yukarıdaki örnekle karşılaştırırız. Burada yalnızca   gereklidir, yukarıda hem   hem de   gereklidir.


 * ile  dönüştürmeden önce ve sonra:
 * ile  dönüştürmeden önce ve sonra:
 * Sonuç kümesi, yalnızca  ve   ile sıralamayı etkilemekle birlikte basitçe   aramakla aynıdır. Bu aynı zamanda, içinde   veya   olan sıfır belge varsa,   için arama sonuçlarıyla yalnızca   aradığınızla aynı sonuçları alacağınız anlamına gelir; bu, klasik bir boole sisteminden beklediğiniz gibi değildir.
 * ile  dönüştürmeden önce ve sonra:
 * Sonuç kümesi, yalnızca  ve   ile sıralamayı etkilemekle birlikte basitçe   aramakla aynıdır. Bu aynı zamanda, içinde   veya   olan sıfır belge varsa,   için arama sonuçlarıyla yalnızca   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  ve   ile sıralamayı etkilemekle birlikte basitçe   aramakla aynıdır. Bu aynı zamanda, içinde   veya   olan sıfır belge varsa,   için arama sonuçlarıyla yalnızca   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  dahil olmak üzere   ile   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ı  ve Lucene varsayılanı  ; bu, sorguda bulunan tek operatörler ise eşdeğerdir:


 * — kullanıcı amacı: her üç terim de herhangi bir sonuçta mevcut olmalıdır
 * — açık klasik boole sorgusu: her üç terim de herhangi bir sonuçta mevcut olmalıdır
 * — Lucene yorumu: her üç terim de herhangi bir sonuçta mevcut olmalıdır

Bununla birlikte,  örtük olduğundan,   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  ise, en önemlisi örtük   olmadığı anlamına gelir, bu durumda   ile sahip olan her şeyle aynıdır (bir sorguda   terimleri varsa ancak   terimleri yoksa, en azından   şartlardan biri herhangi bir sonuçta yer alacaktır):


 * — klasik boole sorgusu: herhangi bir sonuçta üç terimden en az biri bulunmalıdır
 * — Lucene yorumu: herhangi bir sonuçta üç terimden en az biri bulunmalıdır

Örtülü /  ile çok dikkatli olun! Yukarıdaki örnekte,,   ile uygulanan örtük  , sonuçlarda ne   ne de   kesinlikle gerekli olmadığı anlamına gelir.



Booleler, anahtar kelimeler ve önekler
ve, özel anahtar kelimelerle (  veya   gibi) veya ad alanlarıyla (  veya   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 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 /  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  ile eşdeğerdir; terimler veya tümceler eşleşmesi,   boole değeri ile aynıdır.)

Bunun ötesinde,  ve   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.)