You are viewing a plain text version of this content. The canonical link for it is here.
Posted to solr-user@lucene.apache.org by "Thomas L. Redman" <to...@mchsi.com> on 2018/12/06 18:02:00 UTC
Expression Evaluation
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?
Re: Expression Evaluation
Posted by Erick Erickson <er...@gmail.com>.
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
On Thu, Dec 6, 2018 at 10:02 AM Thomas L. Redman <to...@mchsi.com> wrote:
>
> 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?