I've had to do something exactly like this. My approach was to turn AND queries 
into a SpanNearQuery with a slop of Integer.MAX_VALUE and inOrder false, and to 
turn OR queries into a SpanOrQuery. It's a bit hacky, but is much simpler than 
creating your own Query class to implement this.

-Michael 

-----Original Message-----
From: Michel Conrad [mailto:michel.con...@trendiction.com] 
Sent: Thursday, January 17, 2013 12:15 PM
To: java-user@lucene.apache.org
Subject: Re: Combine two BooleanQueries by a SpanNearQuery.

The problem I would like to solve is to have two queries that I will get from 
the query parser (this could include wildcardqueries and phrasequeries).
Both of these queries would have to match the document and as an additional 
restriction I would like to add that a matching term from the first query is 
near a matching term from the second query.

So that you can search for instance for matching documents with in your first 
query 'apple AND NOT computer'
and in your second 'monkey'
with a slop of 10 between the two queries, then it would be equivalent to 
'"apple monkey"~10 AND NOT computer'.

I was wondering if there is a method to combine more complicated queries in a 
similar way. (Some kind of generic solution)

Thanks for your help,

Michel

On Thu, Jan 17, 2013 at 5:14 PM, Jack Krupansky <j...@basetechnology.com> wrote:
> You need to express the "boolean" query solely in terms of SpanOrQuery 
> and SpanNearQuery. If you can't, ... then it probably can't be done, 
> but you should be able to.
>
> How about starting with a plan English description of the problem you 
> are trying to solve?
>
> -- Jack Krupansky
>
> -----Original Message----- From: Michel Conrad
> Sent: Thursday, January 17, 2013 11:01 AM
> To: java-user@lucene.apache.org
> Subject: Combine two BooleanQueries by a SpanNearQuery.
>
>
> Hi,
>
> I am looking to get a combination of multiple subqueries.
>
> What I want to do is to have two queries which have to be near one to 
> another.
>
> As an example:
> Query1: (A AND (B OR C))
> Query2: D
>
> Then I want to use something like a SpanNearQuery to combine both (slop 5):
> Both would then have to match and D should be within slop 5 to A, B or C.
>
> So my question is if there is a query that combines two BooleanQuery 
> trees into a SpanNearQuery.
> It would have to take the terms that match Query 1 and the terms that 
> match Query 2, and look if there is a combination within the required 
> slop.
>
> Can I rewrite the BooleanQuery after parsing the query as a 
> MultiTermQuery, than wrap these in SpanMultiTermQueryWrapper, which 
> can be combined by the SpanNearQuery?
>
> Best regards,
> Michel
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: java-user-unsubscr...@lucene.apache.org
> For additional commands, e-mail: java-user-h...@lucene.apache.org
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: java-user-unsubscr...@lucene.apache.org
> For additional commands, e-mail: java-user-h...@lucene.apache.org
>

---------------------------------------------------------------------
To unsubscribe, e-mail: java-user-unsubscr...@lucene.apache.org
For additional commands, e-mail: java-user-h...@lucene.apache.org


---------------------------------------------------------------------
To unsubscribe, e-mail: java-user-unsubscr...@lucene.apache.org
For additional commands, e-mail: java-user-h...@lucene.apache.org

Reply via email to