Could you rewrite the query into a searcher-specific Weight, and then call 
extractTerms()?  ie, do:

Weight w = searcher.createNormalizedWeight(query, true);
Set<Term> terms = new HashSet<>();
w.extractTerms(terms);

if (terms.size() > 0)
        doStuff();



Alan Woodward
www.flax.co.uk


On 30 Nov 2015, at 05:15, Sandeep Khanzode wrote:

> 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