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:53:26 GMT
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 <alan@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 <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