Discussion:
Expression Evaluation
Thomas L. Redman
2018-12-06 18:02:00 UTC
Permalink
I suspect nobody wants to broach this topic, this has to have come up before, but I can not find an authoritative answer. How does the Standard Query Parser evaluate boolean expressions? I have three fields, content, status and source_name. The expression

content:bement AND status:relevant

yields 111 documents. The expression

source_name:Web

yields 78050168 documents. However, the expression

content:bement AND status:relevant OR source_name:Web

yields 111 documents. Can anybody describe the order of operation, operator priorities used in evaluating the above expression? It looks to me as if it takes the intersection of content:bement and status:relevant, then limits successive set operators to that set. Is that true? So any additional “OR” expressions will have no effect?
Erick Erickson
2018-12-06 18:20:37 UTC
Permalink
The short form is that the query parsers do not implement Boolean
logic by design. The boolean operators are approximated more or less
accurately by using parentheses. So try:

(content:bement AND status:relevant) OR source_name:Web

or, using the "real" syntax, something like:

+content:bement +status:relevant source_name:Web

Also use &debug=query to see exactly what the resulting parsed query
is, but be aware you need to understand the +- etc notation.

Here's a pretty extensive treatment of the issue:
https://lucidworks.com/2011/12/28/why-not-and-or-and-not/

Best,
Erick
Post by Thomas L. Redman
I suspect nobody wants to broach this topic, this has to have come up before, but I can not find an authoritative answer. How does the Standard Query Parser evaluate boolean expressions? I have three fields, content, status and source_name. The expression
content:bement AND status:relevant
yields 111 documents. The expression
source_name:Web
yields 78050168 documents. However, the expression
content:bement AND status:relevant OR source_name:Web
yields 111 documents. Can anybody describe the order of operation, operator priorities used in evaluating the above expression? It looks to me as if it takes the intersection of content:bement and status:relevant, then limits successive set operators to that set. Is that true? So any additional “OR” expressions will have no effect?
Continue reading on narkive:
Loading...