Lucene 2.9.1 comes with a PayloadTermQuery:
http://lucene.apache.org/java/2_9_1/api/all/org/apache/lucene/search/payloads/PayloadTermQuery.html

I have been using that to use the payload as part of the score without any
problem.

Bill


On Tue, Dec 15, 2009 at 6:31 AM, Raghuveer Kancherla <
raghuveer.kanche...@aplopio.com> wrote:

> The interesting thing I am noticing is that the scoring works fine for a
> phrase query like "solr rocks".
> This lead me to look at what query I am using in case of a single term.
> Turns out that I am using PayloadTermQuery taking a cue from solr-1485
> patch.
>
> I changed this to BoostingTermQuery (i read somewhere that this is
> deprecated .. but i was just experimenting) and the scoring seems to work
> as
> expected now for a single term.
>
> Now, the important question is what is the Payload version of a TermQuery?
>
> Regards
> Raghu
>
>
> On Tue, Dec 15, 2009 at 12:45 PM, Raghuveer Kancherla <
> raghuveer.kanche...@aplopio.com> wrote:
>
> > Hi,
> > Thanks everyone for the responses, I am now able to get both phrase
> queries
> > and term queries to use payloads.
> >
> > However the the score value for each document (and consequently, the
> > ordering of documents) are coming out wrong.
> >
> > In the solr output appended below, document 4 has a score higher than the
> > document 2 (look at the debug part). The results section shows a wrong
> score
> > (which is the payload value I am returning from my custom similarity
> class)
> > and the ordering is also wrong because of this. Can someone explain this
> ?
> >
> > My custom query parser is pasted here http://pastebin.com/m9f21565
> >
> > In the similarity class, I return 10.0 if payload is 1 and 20.0 if
> payload
> > is 2. For everything else I return 1.0.
> >
> > {
> >  'responseHeader':{
> >   'status':0,
> >   'QTime':2,
> >   'params':{
> >       'fl':'*,score',
> >       'debugQuery':'on',
> >       'indent':'on',
> >
> >
> >       'start':'0',
> >       'q':'solr',
> >       'qt':'aplopio',
> >       'wt':'python',
> >       'fq':'',
> >       'rows':'10'}},
> >  'response':{'numFound':5,'start':0,'maxScore':20.0,'docs':[
> >
> >
> >       {
> >        'payloadTest':'solr|2 rocks|1',
> >        'id':'2',
> >        'score':20.0},
> >       {
> >        'payloadTest':'solr|2',
> >        'id':'4',
> >        'score':20.0},
> >
> >
> >       {
> >        'payloadTest':'solr|1 rocks|2',
> >        'id':'1',
> >        'score':10.0},
> >       {
> >        'payloadTest':'solr|1 rocks|1',
> >        'id':'3',
> >        'score':10.0},
> >
> >
> >       {
> >        'payloadTest':'solr',
> >        'id':'5',
> >        'score':1.0}]
> >  },
> >  'debug':{
> >   'rawquerystring':'solr',
> >   'querystring':'solr',
> >
> >
> >   'parsedquery':'PayloadTermQuery(payloadTest:solr)',
> >   'parsedquery_toString':'payloadTest:solr',
> >   'explain':{
> >       '2':'\n7.227325 = (MATCH) fieldWeight(payloadTest:solr in 1),
> product of:\n  14.142136 = (MATCH) btq, product of:\n    0.70710677 =
> tf(phraseFreq=0.5)\n    20.0 = scorePayload(...)\n  0.81767845 =
> idf(payloadTest:  solr=5)\n  0.625 = fieldNorm(field=payloadTest, doc=1)\n',
> >
> >
> >       '4':'\n11.56372 = (MATCH) fieldWeight(payloadTest:solr in 3),
> product of:\n  14.142136 = (MATCH) btq, product of:\n    0.70710677 =
> tf(phraseFreq=0.5)\n    20.0 = scorePayload(...)\n  0.81767845 =
> idf(payloadTest:  solr=5)\n  1.0 = fieldNorm(field=payloadTest, doc=3)\n',
> >
> >
> >       '1':'\n3.6136625 = (MATCH) fieldWeight(payloadTest:solr in 0),
> product of:\n  7.071068 = (MATCH) btq, product of:\n    0.70710677 =
> tf(phraseFreq=0.5)\n    10.0 = scorePayload(...)\n  0.81767845 =
> idf(payloadTest:  solr=5)\n  0.625 = fieldNorm(field=payloadTest, doc=0)\n',
> >
> >
> >       '3':'\n3.6136625 = (MATCH) fieldWeight(payloadTest:solr in 2),
> product of:\n  7.071068 = (MATCH) btq, product of:\n    0.70710677 =
> tf(phraseFreq=0.5)\n    10.0 = scorePayload(...)\n  0.81767845 =
> idf(payloadTest:  solr=5)\n  0.625 = fieldNorm(field=payloadTest, doc=2)\n',
> >
> >
> >       '5':'\n0.578186 = (MATCH) fieldWeight(payloadTest:solr in 4),
> product of:\n  0.70710677 = (MATCH) btq, product of:\n    0.70710677 =
> tf(phraseFreq=0.5)\n    1.0 = scorePayload(...)\n  0.81767845 =
> idf(payloadTest:  solr=5)\n  1.0 = fieldNorm(field=payloadTest, doc=4)\n'},
> >
> >
> >   'QParser':'BoostingTermQParser',
> >   'filter_queries':[''],
> >   'parsed_filter_queries':[],
> >   'timing':{
> >       'time':2.0,
> >       'prepare':{
> >        'time':1.0,
> >
> >
> >        'org.apache.solr.handler.component.QueryComponent':{
> >         'time':1.0},
> >        'org.apache.solr.handler.component.FacetComponent':{
> >         'time':0.0},
> >        'org.apache.solr.handler.component.MoreLikeThisComponent':{
> >
> >
> >         'time':0.0},
> >        'org.apache.solr.handler.component.HighlightComponent':{
> >         'time':0.0},
> >        'org.apache.solr.handler.component.StatsComponent':{
> >         'time':0.0},
> >        'org.apache.solr.handler.component.DebugComponent':{
> >
> >
> >         'time':0.0}},
> >       'process':{
> >        'time':1.0,
> >        'org.apache.solr.handler.component.QueryComponent':{
> >         'time':0.0},
> >        'org.apache.solr.handler.component.FacetComponent':{
> >
> >
> >         'time':0.0},
> >        'org.apache.solr.handler.component.MoreLikeThisComponent':{
> >         'time':0.0},
> >        'org.apache.solr.handler.component.HighlightComponent':{
> >         'time':0.0},
> >
> >
> >        'org.apache.solr.handler.component.StatsComponent':{
> >         'time':0.0},
> >        'org.apache.solr.handler.component.DebugComponent':{
> >         'time':1.0}}}}}
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> >
> > On Thu, Dec 10, 2009 at 5:48 PM, AHMET ARSLAN <iori...@yahoo.com> wrote:
> >
> >>
> >> > I was looking through some lucene
> >> > source codes and found the following class
> >> > org.apache.lucene.search.payloads.PayloadSpanUtil
> >> >
> >> > There is a function named queryToSpanQuery in this class.
> >> > Is this the
> >> > preferred way to convert a PhraseQuery to
> >> > PayloadNearQuery?
> >>
> >> queryToSpanQuery method does not return PayloadNearQuery type.
> >>
> >> You need to override getFieldQuery(String field, String queryText, int
> >> slop) of SolrQueryParser or QueryParser.
> >>
> >> This code is modified from Lucene In Action Book (2nd edition) Chapter
> >> 6.3.4 Allowing ordered phrase queries
> >>
> >> protected Query getFieldQuery(String field, String queryText, int slop)
> >> throws ParseException {
> >>
> >>        Query orig = super.getFieldQuery(field, queryText, slop);
> >>
> >>        if (!(orig instanceof PhraseQuery)) return orig;
> >>
> >>        PhraseQuery pq = (PhraseQuery) orig;
> >>        Term[] terms = pq.getTerms();
> >>        SpanQuery[] clauses = new SpanQuery[terms.length];
> >>
> >>        for (int i = 0; i < terms.length; i++)
> >>            clauses[i] = new PayloadTermQuery(terms[i], new
> >> AveragePayloadFunction());
> >>        return new PayloadNearQuery(clauses, slop, true);
> >>
> >>    }
> >>
> >>
> >> > Also, are there any performance considerations while using
> >> > a PayloadNearQuery instead of a PhraseQuery?
> >>
> >> I don't think there will be significant performance difference.
> >>
> >>
> >>
> >>
> >
>

Reply via email to