lucene-java-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Alan Woodward <a...@flax.co.uk>
Subject Re: ConjunctionScorer access
Date Thu, 22 Oct 2015 17:48:02 GMT
If you're using 5.3, you can wrap everything with a PayloadScoreQuery.  Before that you'll
need to use PayloadTermQuery or PayloadNearQuery, but I'd advise upgrading as you'll get better
performance and slightly more sane APIs.

Alan Woodward
www.flax.co.uk


On 22 Oct 2015, at 16:53, Sheng wrote:

> Alan,
> 
> Thanks - that indeed sounds promising. I can use a `SpanPayloadCheckQuery`
> to wrap around a `SpanTermQuery`. Now I still want the payload scoring to
> work, so I should use a Payload Query of some sort. Is there a way that I
> can wrap a `SpanPayloadCheckQuery` into a payload query. I think I should
> use `PayloadNearQuery` since it asks for an array of generic `SpanQuery` ?
> But that seems suspicious, because what I want is really a term based query
> in its essence. Any comments ?
> 
> On Thu, Oct 22, 2015 at 11:34 AM, Alan Woodward <alan@flax.co.uk> wrote:
> 
>> Maybe instead of hacking BooleanWeight, you should use a version of
>> SpanPayloadCheckQuery?  There isn't anything that combines checking and
>> scoring for payloads at the moment, but I don't think it would be too
>> difficult to write one.
>> 
>> Alan Woodward
>> www.flax.co.uk
>> 
>> 
>> On 22 Oct 2015, at 16:21, Sheng wrote:
>> 
>>> Uwe,
>>> 
>>> Problem is how can we get an instance of `ConjunctionScorer` in the first
>>> place. Yes I can use reflection to get an instance of it. However one of
>>> the constructor parameters for this class is an array of subscorers which
>>> comes from the `BooleanWeight`. Like I said, if I hack that as well,
>> there
>>> is really no need to use a delegation pattern any more.
>>> 
>>> On Thu, Oct 22, 2015 at 10:58 AM, Uwe Schindler <uwe@thetaphi.de> wrote:
>>> 
>>>> Hi,
>>>> 
>>>> How about using delegate.getChildren() [delegate is the
>> ConjunctionScorer
>>>> you wrap] in your FilterScorer? By that you get a List of all
>> ChildScorer
>>>> instances with "MUST" as type and a reference to the Scorer itsself. You
>>>> can use those in the FilterScorer's score() method to get subscores for
>>>> each child.
>>>> 
>>>> Uwe
>>>> 
>>>> -----
>>>> Uwe Schindler
>>>> H.-H.-Meier-Allee 63, D-28213 Bremen
>>>> http://www.thetaphi.de
>>>> eMail: uwe@thetaphi.de
>>>> 
>>>> 
>>>>> -----Original Message-----
>>>>> From: Sheng [mailto:shengcer@gmail.com]
>>>>> Sent: Thursday, October 22, 2015 4:06 PM
>>>>> To: java-user@lucene.apache.org
>>>>> Subject: Re: ConjunctionScorer access
>>>>> 
>>>>> That's the problem right - none of them are public, and even neither
is
>>>> the
>>>>> constructor of `ConjunctionScorer`. Moreover, `ConjunctionScorer` needs
>>>>> access to list of sub-scorers to emit the doc and score. Information
>>>> like this
>>>>> has to come from the `BooleanWeight`, which is another hack if I want
>> to
>>>>> leverage this.
>>>>> 
>>>>> On Thu, Oct 22, 2015 at 9:22 AM, Alan Woodward <alan@flax.co.uk>
>> wrote:
>>>>> 
>>>>>> You should be able to use a FilterScorer that wraps a
>>>>>> ConjunctionScorer and overrides score().
>>>>>> 
>>>>>> Alan Woodward
>>>>>> www.flax.co.uk
>>>>>> 
>>>>>> 
>>>>>> On 22 Oct 2015, at 13:43, Sheng wrote:
>>>>>> 
>>>>>>> Thanks for the reply and suggestion. If I search for term A and
term
>>>>>>> B
>>>>>> with
>>>>>>> a BooleanQuery in Lucene, normally Lucene returns documents that
>>>>>>> have a match of both A and B. Now I am using payload to vary
the
>>>>>>> scores w.r.t search of term A and search of term B, so it is
>>>>>>> possible for example a document has both match of term A and
term B,
>>>>>>> but only the score for
>>>>>> term A
>>>>>>> is 0. In this case, I want Lucene does not return this document
 at
>>>> all.
>>>>>>> However the internal ConjunctionScorer will just sum up the scores
>>>>>> returned
>>>>>>> by both subquery of A and B, thus the document has a score >
0
>>>>>>> returned
>>>>>> by
>>>>>>> the BooleanQuery, and therefore it cannot be filtered by a
>>>>>>> PositiveScoreOnlyCollector. I know hacking into ConjunctionScorer
>>>>>> probably
>>>>>>> is too intrusive, but wondering if there is a better way to achieve
>>>>>>> the same effect ?
>>>>>>> 
>>>>>>> On Thu, Oct 22, 2015 at 4:13 AM, Uwe Schindler <uwe@thetaphi.de>
>>>>> wrote:
>>>>>>> 
>>>>>>>> Hi,
>>>>>>>> 
>>>>>>>> Those are internal classes and not to be extended (not only
the
>>>>>>>> constructor is pkg-private, the whole class is:
>>>> https://goo.gl/5WyLYz)!
>>>>>>>> Scorers follow the delegator pattern. If you want to modify
the
>>>>>> behaviour
>>>>>>>> of a Scorer, create a delegator scorer (e.g. some Filtering
Scorer)
>>>>>>>> and change its behaviour (e.g. filter additional documents,...).
>>>>>>>> This can be done by a query that filters other querys. E.g.
look at
>>>>>> ConstantScoreQuery
>>>>>>>> or similar queries that wrap other scorers.
>>>>>>>> 
>>>>>>>> Subclassing ConjunctionScorer would bring you nothing because
>>>>>>>> internals are still private - and that's good.
>>>>>>>> 
>>>>>>>> Uwe
>>>>>>>> 
>>>>>>>> -----
>>>>>>>> Uwe Schindler
>>>>>>>> H.-H.-Meier-Allee 63, D-28213 Bremen http://www.thetaphi.de
>>>>>>>> eMail: uwe@thetaphi.de
>>>>>>>> 
>>>>>>>> 
>>>>>>>>> -----Original Message-----
>>>>>>>>> From: Sheng [mailto:shengcer@gmail.com]
>>>>>>>>> Sent: Wednesday, October 21, 2015 7:03 PM
>>>>>>>>> To: java-user@lucene.apache.org
>>>>>>>>> Subject: ConjunctionScorer access
>>>>>>>>> 
>>>>>>>>> It's a bummer Lucene makes the constructor of ConjunctionScorer
>>>>> non-
>>>>>>>>> public. I wanted to extend from this class in order to
tweak its
>>>>>>>> behavior for
>>>>>>>>> my use case. Is it possible to change it to protected
in future
>>>>>> releases
>>>>>>>> ?
>>>>>>>> 
>>>>>>>> 
>>>>>>>> 
>>>> ---------------------------------------------------------------------
>>>>>>>> To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
>>>>>>>> For additional commands, e-mail: java-user-help@lucene.apache.org
>>>>>>>> 
>>>>>>>> 
>>>>>> 
>>>>>> 
>>>> 
>>>> 
>>>> ---------------------------------------------------------------------
>>>> To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
>>>> For additional commands, e-mail: java-user-help@lucene.apache.org
>>>> 
>>>> 
>> 
>> 


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