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