lucene-java-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Todd VanderVeen <>
Subject Re: Optional Terms in a single query
Date Mon, 21 Feb 2005 23:26:19 GMT
Luke Shannon wrote:

>The API I'm working with combines a series of queries into one larger one
>using a boolean query.
>Queries on the same field get OR's into one big query. All remaining queries
>are AND'd with this big one.
>Working with in this system I have:
>arg = (mario luigi bobby joe) //i do have control of how this list is
>I pass this to the QueryParser:
>Query query1 = QueryParser.parse(arg, "name", new StandardAnalyzer());
>Query query2 = QueryParser.parse("stillhere", "olfaithfull", new
>BooleanQuery typeNegativeSearch = new BooleanQuery();
>typeNegativeSearch.add(query1, false, true);
>typeNegativeSearch.add(query2, true, false);
>This is half the query.
>It gets AND'd with the other half, to create what you see below:
>+(type:181) +((-(name:tim name:harry name:bill) +olfaithfull:stillhere))
>What I am having trouble with is getting the QueryParser to create
>this: -name:(tim bill harry)
>I feel like this is something simple, but for some reason I can't figure it
Is the API something you control?

Lets call the other half of you query query3. To avoid the extra nesting 
you need to do the composition in a single boolean query.

Query query1 = QueryParser.parse(arg, "name", new StandardAnalyzer());
Query query2 = QueryParser.parse("stillhere", "olfaithfull", new StandardAnalyzer());
Query query3 = ....

BooleanQuery finalQuery = new BooleanQuery();
finalQuery.add(query1, false, true);
finalQuery.add(query2, true, false);
finalQuery.add(query3, true, false);

Todd VanderVeen

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

View raw message