Hi Uwe,
Thanks.
Actually, I do use that logic in another part of the code for some other 
functionality :).
However, I was wondering if we have some direct API to check for the presence 
of terms (Terms, NumericRanges, etc.) given an abstract query. My requirement 
is simple: Irrespective of the Query sub-class implementation (which will 
either extend or change in the future), I want to check whether the net effect 
of this query (bool or otherwise) is a MatchAllQuery (i.e. without any terms) 
or a query with at least one term, or numeric range.
The alternative to traverse the bool hierarchy and check instanceOf() on every 
clause for a Query Subclass may be involved, cumbersome, and prone to error. 
Your thoughts? -----------------------Thanks n Regards,
Sandeep Ramesh Khanzode 


    On Saturday, November 28, 2015 5:29 PM, Uwe Schindler <u...@thetaphi.de> 
wrote:
 

 Hi,

You can also traverse a BooleanQuery. Just do instanceof BooleanQuery checks 
and if it is a BooleanQuery recursively iterate over all clauses [you can use a 
BooleanQuery in a for-each java loop as it implements Iterable]. For each 
clause recurse and check types again. Then you should be able to detect all 
types of queries in the tree.

Uwe

-----
Uwe Schindler
H.-H.-Meier-Allee 63, D-28213 Bremen
http://www.thetaphi.de
eMail: u...@thetaphi.de

> -----Original Message-----
> From: Sandeep Khanzode [mailto:sandeep_khanz...@yahoo.com.INVALID]
> Sent: Saturday, November 28, 2015 12:22 PM
> To: java-user@lucene.apache.org
> Subject: Re: Determine whether a MatchAllQuery or a Query with atleast
> one Term
> 
> Hi,
> Actually, the MatchAllQuery, for all I know (since it is invoked by the 
> client)
> can be wrapped in a Bool Query type. Hence, it is difficult for me to traverse
> the Bool Query clauses and determine MatchAll, whereas there may be
> other clauses which do contain a TermQuery or a NumericRangeQuery in
> which case a MatchAllQuery check is futile.
> Given any query, Bool Query or MatchAll, or a specific subclass of Query,
> what would be the safe way to determine that this is not a MatchAll query
> without any terms, or whether this is a query that contains at least one term
> or range? -----------------------Thanks n Regards,
> Sandeep Ramesh Khanzode
> 
> 
>    On Saturday, November 28, 2015 12:30 PM, Michael Wilkowski
> <m...@silenteight.com> wrote:
> 
> 
>  Instanceof?
> 
> MW
> Sent from Mi phone
> On 28 Nov 2015 06:57, "Sandeep Khanzode"
> <sandeep_khanz...@yahoo.com.invalid>
> wrote:
> 
> > Hi,
> > I have a question.
> > In my program, I need to check whether the input query is a MatchAll
> Query
> > that contains no terms, or a Query (any variant) that has at least one
> > term. For typical Term queries, this seems reasonable to be done with
> > Query.extractTerms(Set<> terms) which gives the list of terms.
> > However, when there is a NumericRangeQuery, this method throws an
> > UnsupportedOperationException.
> > How can I determine that a NumericRangeQuery or any non-Term query
> exists
> > in the Input Query and differentiate it from the MatchAllQuery? -- SRK
> 
> 
> 


---------------------------------------------------------------------
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