You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-user@lucene.apache.org by Morus Walter <mo...@tanto-xipolis.de> on 2003/08/08 12:33:39 UTC

query parser operator precedence and strange result

Hi,

im currently trying to understand how the standard query parser
handles operator precedence in a query like
a OR b AND c OR d
This is output by the toString method as
a +b +c d
so AND seems to have higher precedence than OR

Now if I try to check this and look at
a OR ( b AND c ) OR d
I see
a (+b +c) d
which is still fine so far, but I get a different search result.

a OR b AND C OR d matches one document that contains two tokens 'c'
one token 'b' and three tokens 'd'.
a OR (b AND c) OR d matches this document plus another one, that 
contains one 'a', a number of 'b', no 'c' and no 'd'.
Token number found looking at the tokens in my input. So I might
have overseen some difference between my indexing and my token
counting.

But the question I don't understand is:
What is the difference between
a OR b AND c OR d
and 
a OR ( b AND c ) OR d
or
a +b +c d
and
a (+b +c) d
Why do I get different results?

Back to my original question of operator precedence:
b AND c
gives one hit.
But
b AND c OR a AND d
(output as  +b +c +a +d)
gives none.
So my theory of AND having higher precedence than OR does not hold.

Of course I should try to understand this rather from the sources than
from some experiments.
I tried, but I didn't succed.

So can anyone help me with the question how queries containing 
AND OR and NOT are executed if one does not explicitly use 
parentheses?

greetings
	Morus