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 <u...@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: u...@thetaphi.de
>> 
>> 
>>> -----Original Message-----
>>> From: Sheng [mailto:sheng...@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 <a...@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 <u...@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: u...@thetaphi.de
>>>>>> 
>>>>>> 
>>>>>>> -----Original Message-----
>>>>>>> From: Sheng [mailto:sheng...@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-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