Here is the case: the first doc under pe is 100.
- the first call advanceExact(10) returns false and pe is advanced to 100.
- the second call advanceExact(20) returns false without attempting to
advance pe, but just checking current doc.
another edge case, when pe is exhausted and docId() returns NO_MORE_DOCS
(Integer.MAX_VALUE), thus there will be no more attempts to advance it
again.
On Sun, Jan 27, 2019 at 10:35 PM MarcoR
wrote:
> Hi,
>
> TermFreqDoubleValuesSource is used to expose a particular indexreader stat
> as per https://issues.apache.org/jira/browse/LUCENE-7736
>
> I noticed that the advanceExact method is checking for the condition in
> which the postingsenum may have moved ahead of the doc Id of the
> FilterScorer which calls advanceExact method (I'm referring to
> implementation of FunctionScoreWeight.scorer method)
>
> The code I'm talking about is this:
>
> return new DoubleValues() {
> @Override
> public double doubleValue() throws IOException {
> return pe.freq();
> }
>
> @Override
> public boolean advanceExact(int doc) throws IOException {
> if (pe.docID() > doc)
> return false;
> return pe.docID() == doc || pe.advance(doc) == doc;
> }
> };
>
> What I'm curious about is why the check on pe.docId() is necessary? Given
> the postings enum is created specifically for the purpose of building the
> DoubleValues instance and its reference does not escape the parent
> TermFreqDoubleValuesSource .getValues(..) method, how can it get ahead of
> the scorer's docId?
> I can imagine the scorer's doc id getting ahead of the postings enum since
> the scorer my skip documents that does not fit some criteria but since
> there
> is nothing else that could be moving the postings enum ahead, why this
> check?
>
> An obvious extension of the question is, why do we return false if the
> checked condition is true? Is it really the case that DoubleValues cannot
> be
> provided if postingsEnum's docId is ahead? How do we safely assume that
> this
> is the case until scorer catches up with postings enum?
>
> I'm working on implementing some custom logic based on
> TermFreqDoubleValuesSource and I would like to understand its mechanics
> properly.
>
>
>
> --
> Sent from:
> http://lucene.472066.n3.nabble.com/Lucene-Java-Developer-f564358.html
>
> -
> To unsubscribe, e-mail: dev-unsubscr...@lucene.apache.org
> For additional commands, e-mail: dev-h...@lucene.apache.org
>
>
--
Sincerely yours
Mikhail Khludnev