Skip to content

Utilize docIdRunEnd on ReqExclBulkScorer #14806

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 4 commits into
base: main
Choose a base branch
from

Conversation

HUSTERGS
Copy link
Contributor

Description

This PR propose to utilize docIdRunEnd on ReqExclBulkScorer, so we can jump faster on MUST_NOT clause

Copy link

This PR does not have an entry in lucene/CHANGES.txt. Consider adding one. If the PR doesn't need a changelog entry, then add the skip-changelog label to it and you will stop receiving this reminder on future updates to the PR.

Copy link

This PR does not have an entry in lucene/CHANGES.txt. Consider adding one. If the PR doesn't need a changelog entry, then add the skip-changelog label to it and you will stop receiving this reminder on future updates to the PR.

Copy link

This PR does not have an entry in lucene/CHANGES.txt. Consider adding one. If the PR doesn't need a changelog entry, then add the skip-changelog label to it and you will stop receiving this reminder on future updates to the PR.

@github-actions github-actions bot added this to the 10.3.0 milestone Jun 18, 2025
if (exclTwoPhase == null) {
// from upTo to docIdRunEnd() are excluded, so we scored up to docIdRunEnd()
upTo = exclApproximation.docIDRunEnd();
} else if (exclTwoPhase.matches()) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is upTo = Math.max(upTo + 1, exclTwoPhase.docIdRunEnd()) correct here?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think it's correct here, and I run lucene test locally, everything looks fine. What I'm concerned here is that only DocValuesRangeIterator implement it's own docIdRunEnd method for now, I'm not sure whether adding this will hurt the performance or not

if (exclTwoPhase == null || exclTwoPhase.matches()) {
if (exclTwoPhase == null) {
// from upTo to docIdRunEnd() are excluded, so we scored up to docIdRunEnd()
upTo = exclApproximation.docIDRunEnd();
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Do we need to check exclApproximation.docID() != DocIdSetIterator#NO_MORE_DOCS?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If I understand correctly, exclApproximation.docID() should equals exclDoc, which is equal to upTo (under the if clause ), and upTo is less than max, so exclApproximation.docID() should never be DocIdSetIterator#NO_MORE_DOCS?

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Oh yes, You are right. Thanks for explanation!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants