lucene-java-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Anuj Shah <anujshahw...@gmail.com>
Subject Re: Get fields from a Query object
Date Thu, 05 Aug 2010 10:52:58 GMT
Having delved a bit more into the code it looks like every MultiTermQuery
descendant fails to implement the extractTerms method. This does make sense,
as it is not possible to list every term that satisfies a wildcard query.

I also notice that most Query classes including the MultiTermQuery's, have a
getField method. But, this is not part of any common interface or base
class. It would be beneficial to have a public extractFields method which
operates in the same way as extractTerms. Perhaps a feature request can be
raised for this.

I've had a go at using a regular expression on the query string, but that is
becoming extremely convoluted due to escaping, quotations and the default
fieldname.

My only other idea is a giant recursive method which will instanceof and
casting to re-curse the entire Boolean structure of a Query object.


Does anyone else have any other ideas?

Anuj




On Tue, Aug 3, 2010 at 9:49 PM, Erick Erickson <erickerickson@gmail.com>wrote:

> Hmmmm. Assuming you called rewrite, I'm going to have to defer
> that one, I'm not familiar enough with how range queries operate.
>
> But what version of Lucene are you using?
>
> Sorry I can't be more help
> Erick
>
> On Tue, Aug 3, 2010 at 5:02 AM, Anuj Shah <anujshahwork@gmail.com> wrote:
>
> > Thanks, that does seem good in theory. I can get the field from each of
> the
> > terms and add them to a Set to de-dupe.
> >
> > However, in practice queries of the following nature seems to fail with
> an
> > UnsupportedOperationException:
> > field:a*
> > field:[a TO b]
> >
> > Delving into the code a bit I see the following in the Query class
> >  /**
> >   * Expert: adds all terms occurring in this query to the terms set. Only
> >   * works if this query is in its {@link #rewrite rewritten} form.
> >   *
> >   * @throws UnsupportedOperationException if this query is not yet
> > rewritten
> >   */
> >  public void extractTerms(Set<Term> terms) {
> >    // needs to be implemented by query subclasses
> >    throw new UnsupportedOperationException();
> >  }
> >
> > Does this imply that some concrete Query classes have not overridden this
> > method?
> >
> >
> >
> >
> >
> > On Mon, Aug 2, 2010 at 4:01 PM, Erick Erickson <erickerickson@gmail.com
> > >wrote:
> >
> > > Did you look at Query.extractTerms? I think that'll work for you.
> > > Note that the query must be rewritten, and that the set of terms will
> > > have duplicate fields. i.e. if you search field1:Erick +field1:James
> > > I expect you'll have two terms in the set that are on field1.
> > >
> > > Best
> > > Erick
> > >
> > > On Mon, Aug 2, 2010 at 8:16 AM, Anuj Shah <anujshahwork@gmail.com>
> > wrote:
> > >
> > > > My code has been given a query string, which we parse into the Query
> > > object
> > > > and would like to get a list of fields from.
> > > >
> > > > I'm assuming there exists a method to do so, as it seems like a
> useful
> > > > function. If not should I be parsing the string for fields myself.
> > > >
> > > > Anuj
> > > >
> > > >
> > > >
> > > >
> > > >
> > > > On Sun, Aug 1, 2010 at 2:21 AM, Erick Erickson <
> > erickerickson@gmail.com
> > > > >wrote:
> > > >
> > > > > Could you explain more about what you're trying to do? You're
> writing
> > > the
> > > > > query
> > > > > after all, so you probably already know what went into it.
> > > > >
> > > > > Which shows that I don't understand what you want to do at all.
> > > > >
> > > > > Best
> > > > > Erick
> > > > >
> > > > > On Sat, Jul 31, 2010 at 9:41 AM, Anuj Shah <anujshahwork@gmail.com
> >
> > > > wrote:
> > > > >
> > > > > > Hi,
> > > > > >
> > > > > > Is there a way to get all the fields involved in a query?
> > > > > >
> > > > > > Thanks
> > > > > >
> > > > > > Anuj
> > > > > >
> > > > >
> > > >
> > >
> >
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message