Lucene QueryParser: must contain either one or the other among other MUST clauses

1.1k views Asked by At

How can QueryParser from Apache Lucene be used to have a query that either contains term A or term B (or both, but at least one of them). EDIT: Also, it contains other MUST clauses, e.g., it must contain C and it must contain either A or B.

Is this then correct?

+(A OR B) +C
1

There are 1 answers

3
Lucas Trzesniewski On BEST ANSWER

It is simply: A OR B (or just A B)

This will generate two BooleanClauses with Occur.SHOULD. In this case, at least one clause has to match for the whole BooleanQuery to match:

/** Use this operator for clauses that <i>should</i> appear in the 
 * matching documents. For a BooleanQuery with no <code>MUST</code> 
 * clauses one or more <code>SHOULD</code> clauses must match a document 
 * for the BooleanQuery to match.
 * @see BooleanQuery#setMinimumNumberShouldMatch
 */
SHOULD   { @Override public String toString() { return "";  } },

Answer to the updated question:

(A OR B) AND C should do what you want.

I'm not really sure about +(A OR B) +C since it looks like it should work but you stated that +(A OR B) doesn't work like you expect it to in your original question.

To make sure, you can take a look at what QueryParser generates. You'd need this kind of query structure:

  • BooleanQuery
    • Must: BooleanQuery
      • Should: TermQuery: A
      • Should: TermQuery: B
    • Must: TermQuery: C