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: [email protected] > -----Original Message----- > From: Sheng [mailto:[email protected]] > Sent: Thursday, October 22, 2015 4:06 PM > To: [email protected] > 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 <[email protected]> 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 <[email protected]> > 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: [email protected] > > >> > > >> > > >>> -----Original Message----- > > >>> From: Sheng [mailto:[email protected]] > > >>> Sent: Wednesday, October 21, 2015 7:03 PM > > >>> To: [email protected] > > >>> 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: [email protected] > > >> For additional commands, e-mail: [email protected] > > >> > > >> > > > > --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
