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: [email protected] > -----Original Message----- > From: Lance Norskog [mailto:[email protected]] > Sent: Saturday, July 31, 2010 10:50 PM > To: [email protected] > 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 <[email protected]> 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: [email protected] > > > > > >> -----Original Message----- > >> From: Uwe Schindler [mailto:[email protected]] > >> Sent: Saturday, July 31, 2010 10:19 AM > >> To: [email protected] > >> 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: [email protected] > >> > >> > >> > -----Original Message----- > >> > From: Philippe [mailto:[email protected]] > >> > Sent: Saturday, July 31, 2010 10:04 AM > >> > To: [email protected] > >> > 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: [email protected] > >> > For additional commands, e-mail: [email protected] > >> > >> > >> > >> --------------------------------------------------------------------- > >> To unsubscribe, e-mail: [email protected] > >> For additional commands, e-mail: [email protected] > > > > > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: [email protected] > > For additional commands, e-mail: [email protected] > > > > > > > > -- > Lance Norskog > [email protected] > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [email protected] > For additional commands, e-mail: [email protected] --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
