We don't want to modify the ranking using functions, we want to switch some 
queries to constant score mode. The QueryParser subclassing is just to make it 
convenient.

In general to strip off scores from queries, you use "new 
ConstantScoreQuery(new QueryWrapperFilter(query))", this is used inside Lucene, 
too (MultiTermQuery,...). The trick is to normalize the Scorer to return a 
constant value (boost of CSQ). This can be done by first wrapping the scorer of 
the original query in a filter and then add a scorer to the filter again, that 
returns a constant.

With function queries you can do something similar by returning a constant in 
the CustomScoreProvider. The QWF/CSQ trick is more convenient and used quite 
often inside Lucene, too.

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


> -----Original Message-----
> From: Lance Norskog [mailto:goks...@gmail.com]
> Sent: Saturday, July 31, 2010 10:50 PM
> To: java-user@lucene.apache.org
> Subject: Re: Rank results only on some fields
> 
> Can't this use case be done with a function query?
> 
> On Sat, Jul 31, 2010 at 1:59 AM, Uwe Schindler <u...@thetaphi.de> wrote:
> > Here some example code, the method is getFieldQuery() (Lucene 2.9 or
> > 3.0 or following, don't use that approach before, because
> > QueryWrapperFilter is not effective before 2.9 for that):
> >
> > @Override
> > protected Query getFieldQuery(String field, String queryText)  throws
> > ParseException {
> >        Query q = super.getFieldQuery(field,queryText);
> >        if (!"TITLE".equals(field))
> >                q = new ConstantScoreQuery(new QueryWrapperFilter(q));
> >        return q;
> > }
> >
> > I hope that explains itself. You may look at other Query type
> > factories in QP that produce scoring queries and wrap them similar.
> > But e.g. WildCard and RangeQueries are constant score. Phrases are also
> handled by this method.
> > Only the slop setting may not work correctly after this (look at the
> > instanceof checks in getFieldQuery(..., slop)).
> >
> > Uwe
> >
> > -----
> > Uwe Schindler
> > H.-H.-Meier-Allee 63, D-28213 Bremen
> > http://www.thetaphi.de
> > eMail: u...@thetaphi.de
> >
> >
> >> -----Original Message-----
> >> From: Uwe Schindler [mailto:u...@thetaphi.de]
> >> Sent: Saturday, July 31, 2010 10:19 AM
> >> To: java-user@lucene.apache.org
> >> Subject: RE: Rank results only on some fields
> >>
> >> You can construct the query using a customized query parser that
> >> wraps all queries not with the suggested field name using a "new
> >> ConstantScoreQuery(new QueryWrapperFilter(originalCreatedQuery))".
> >> Override
> >> newFieldQuery() to do that and pass the super call to this ctor chain.
> >>
> >> Uwe
> >>
> >> -----
> >> Uwe Schindler
> >> H.-H.-Meier-Allee 63, D-28213 Bremen
> >> http://www.thetaphi.de
> >> eMail: u...@thetaphi.de
> >>
> >>
> >> > -----Original Message-----
> >> > From: Philippe [mailto:mailer.tho...@gmail.com]
> >> > Sent: Saturday, July 31, 2010 10:04 AM
> >> > To: java-user@lucene.apache.org
> >> > Subject: Rank results only on some fields
> >> >
> >> > Hi,
> >> >
> >> > I want to rank my results only on parts of my query.  E.g my query
> >> > is "TITLE:Lucene AND AUTHOR:Manning". After this query standard
> >> > lucene ranking for both fields take place.
> >> >
> >> > However, is it possible to query the index using the full query and
> >> > rank results only according to the "TITLE"-Field?
> >> >
> >> > Regards,
> >> >      Philippe
> >> >
> >> > -------------------------------------------------------------------
> >> > -- To unsubscribe, e-mail: java-user-unsubscr...@lucene.apache.org
> >> > For additional commands, e-mail: java-user-h...@lucene.apache.org
> >>
> >>
> >>
> >> ---------------------------------------------------------------------
> >> To unsubscribe, e-mail: java-user-unsubscr...@lucene.apache.org
> >> For additional commands, e-mail: java-user-h...@lucene.apache.org
> >
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: java-user-unsubscr...@lucene.apache.org
> > For additional commands, e-mail: java-user-h...@lucene.apache.org
> >
> >
> 
> 
> 
> --
> Lance Norskog
> goks...@gmail.com
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: java-user-unsubscr...@lucene.apache.org
> For additional commands, e-mail: java-user-h...@lucene.apache.org



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