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