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:
 * convert  to   before and after (in this case overriding the previously applied  ), giving:
 * The result set is thus the same as, with   being optional (and only affecting ranking).
 * convert  to   before and after (in this case overriding the previously applied  ), giving:
 * The result set is thus the same as, with   being optional (and only affecting ranking).
 * The result set is thus the same as, with   being optional (and only affecting ranking).


 * convert  to   before and after, giving:
 * apply an implicit  to any term without an explicit   or , giving:
 * In a classic boolean system with implicit, we would expect that   and   to be the same, but compare this to the example above to see the difference—only   is required here, while   and   are both required above.
 * apply an implicit  to any term without an explicit   or , giving:
 * In a classic boolean system with implicit, we would expect that   and   to be the same, but compare this to the example above to see the difference—only   is required here, while   and   are both required above.
 * In a classic boolean system with implicit, we would expect that   and   to be the same, but compare this to the example above to see the difference—only   is required here, while   and   are both required above.


 * convert  to   before and after, giving:
 * convert  to   before and after, giving:
 * The result set is thus the same as simply searching for, with   and   only affecting ranking. This also means that if there are zero documents with either   or   in them, you will get the same results searching for   as you would for just searching for  , which is not what you would expect from a classic boolean system.
 * convert  to   before and after, giving:
 * The result set is thus the same as simply searching for, with   and   only affecting ranking. This also means that if there are zero documents with either   or   in them, you will get the same results searching for   as you would for just searching for  , which is not what you would expect from a classic boolean system.
 * The result set is thus the same as simply searching for, with   and   only affecting ranking. This also means that if there are zero documents with either   or   in them, you will get the same results searching for   as you would for just searching for  , which is not what you would expect from a classic boolean system.

In general, mixing  with , including implicit   in one query gives results that are unintuitive in a classic boolean framework. It can also be very difficult to detect these cases where the boolean logic goes awry, unless you already know exactly how many documents contain each possible positive and negative combination of your query terms.

Common use cases
If you have no explicit operators, then the boolean default is  and the Lucene default is , which are equivalent if they are the only operators present in the query:


 * — user intent: all three terms must be present in any results
 * — explicit classic boolean query: all three terms must be present in any results
 * — Lucene interpretation: all three terms must be present in any results

However, since  is implicit, nothing is gained by making it explicit by using , other than the potential for later boolean confusion.

If the only operator in the query is —crucially meaning that there is no implicit , then it is the same as everything having a   (recall that if a query has   terms but no   terms, than at least one of the   terms will be present in any result):


 * — classic boolean query: at least one of the three terms must be present in any results
 * — Lucene interpretation: at least one of the three terms must be present in any results

Be very careful with implicit / ! In the example above,  the implicit   applied to   means that neither   nor   are strictly required to be in the results.

Booleans, keywords, and prefixes
and  do not interact predictably with special keywords (like   or  ) or with namespaces (like   or  ) and probably should not be used in conjunction with either.

Future plans
Of course, the Search Platform team is not very happy with this state of affairs.

In the short term we are creating this document and updating the documentation to reflect the reality of our current system.

Longer term, we plan to implement a new layer in CirrusSearch that will properly construct a Lucene /  query that is equivalent to a given classic boolean query, including proper support for parentheses and return the expected results. (It is possible to specify in Lucene that at least one of a set of query terms or clauses is a required to match, which is equivalent to a boolean ; requiring that all of a set of query terms or clauses match is the same as a boolean  .)

Beyond that, we may also make explicit the  and   operators, possibly using the unary syntax shown in this document, but also possibly using some other syntax, as yet to be determined.