Lucene's nested query evaluation regarding negation
Posted
by ponzao
on Stack Overflow
See other posts from Stack Overflow
or by ponzao
Published on 2010-03-18T10:46:58Z
Indexed on
2010/03/18
10:51 UTC
Read the original article
Hit count: 537
Hi,
I am adding Apache Lucene support to Querydsl (which offers type-safe queries for Java) and I am having problems understanding how Lucene evaluates queries especially regarding negation in nested queries.
For instance the following two queries in my opinion are semantically the same, but only the first one returns results.
+year:1990 -title:"Jurassic Park"
+year:1990 +(-title:"Jurassic Park")
The simplified object tree in the second example is shown below.
query : Query
clauses : ArrayList
[0] : BooleanClause
"MUST" occur : BooleanClause.Occur
"year:1990" query : TermQuery
[1] : BooleanClause
"MUST" occur : BooleanClause.Occur
query : BooleanQuery
clauses : ArrayList
[0] : BooleanClause
"MUST_NOT" occur : BooleanClause.Occur
"title:"Jurassic Park"" query : TermQuery
Lucene's own QueryParser
seems to evaluate "AND (NOT"
into the same kind of object trees.
Is this a bug in Lucene or have I misunderstood Lucene's query evaluation? I am happy to give more information if necessary.
© Stack Overflow or respective owner