Going by the example, it looks like you could do something like this: 1) Use the existing field for adding terms with payloads as before ("payload_field"); 2) Introduce another field ("excluded_field"), adding only those terms where you expect a score of zero to be returned (based on the payload); 2) Add MUST clauses for term A and term B in "payload_field", and also include a MUST_NOT clause matching term A in "excluded_field" to the BooleanQuery.
The idea is that documents that have both term A and term B in "payload_field" will not necessarily have term A in "excluded_field" -- only the ones that you don't want to see in the result set. Regards, András On Thu, Oct 22, 2015 at 4:06 PM, Sheng <sheng...@gmail.com> wrote: > 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 > > >> > > >> > > > > > -- András Péteri