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