Alan, Thanks - that indeed sounds promising. I can use a `SpanPayloadCheckQuery` to wrap around a `SpanTermQuery`. Now I still want the payload scoring to work, so I should use a Payload Query of some sort. Is there a way that I can wrap a `SpanPayloadCheckQuery` into a payload query. I think I should use `PayloadNearQuery` since it asks for an array of generic `SpanQuery` ? But that seems suspicious, because what I want is really a term based query in its essence. Any comments ?
On Thu, Oct 22, 2015 at 11:34 AM, Alan Woodward <a...@flax.co.uk> wrote: > 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 > >> > >> > >