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:[email protected]] 
Sent: Thursday, January 17, 2013 12:15 PM
To: [email protected]
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 <[email protected]> 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: [email protected]
> 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: [email protected]
> For additional commands, e-mail: [email protected]
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to