lucene-java-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Uwe Schindler" <>
Subject RE: Unexpected Results - using should and must in boolean query
Date Sun, 12 Sep 2010 13:51:57 GMT

I always recommend my customers to not mix should and must in the same
BooleanQuery if strict boolean matching is needed. It will match all docs,
containing the MUST clause and "boost" all SHOULD terms.

If you have some MUST terms, but you also want to have at least one of a
list of other terms (like 5 SHOULD clauses), the trick is to separate both:
Create a BooleanQuery with 2 MUST clauses, one is your required TermQuery
and the second clause is itself a BooleanQuery with all the SHOULD clauses.
This ensures that at least one of the SHOULD terms is needed together with
the MUST term.


Uwe Schindler
H.-H.-Meier-Allee 63, D-28213 Bremen

> -----Original Message-----
> From: liat oren []
> Sent: Sunday, September 12, 2010 2:04 PM
> To:
> Subject: Unexpected Results - using should and must in boolean query
> Hi,
> I am running a query and get some unexpected results.
> When I run boolean query on a text field for the word X, using occur =
> the results contain the word X.
> However, when I add another boolean query on another field (country) for
> word Y, using occur = MUST, in the results I get only documents in country
> but from some reason, not only that I get documents that don't contain the
> word X, they get higher score than those contain the word X.
> If I change the occur of the word X in the query to MUST, it of course
fixes it,
> but I don't understand why the SHOULD "lost" its "power" when I added the
> MUST on another field.
> Could something like this can happen?
> How can it be solved?
> Many thanks,
> Liat

To unsubscribe, e-mail:
For additional commands, e-mail:

View raw message