lucene-java-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Sheng <sheng...@gmail.com>
Subject Re: ConjunctionScorer access
Date Thu, 22 Oct 2015 15:21:17 GMT
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 <uwe@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: uwe@thetaphi.de
>
>
> > -----Original Message-----
> > From: Sheng [mailto:shengcer@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 <alan@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 <uwe@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: uwe@thetaphi.de
> > > >>
> > > >>
> > > >>> -----Original Message-----
> > > >>> From: Sheng [mailto:shengcer@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-unsubscribe@lucene.apache.org
> > > >> For additional commands, e-mail: java-user-help@lucene.apache.org
> > > >>
> > > >>
> > >
> > >
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: java-user-unsubscribe@lucene.apache.org
> For additional commands, e-mail: java-user-help@lucene.apache.org
>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message