From 3a13282a8313df57156c93671c671d0365f298f0 Mon Sep 17 00:00:00 2001 From: "guofeng.my" Date: Fri, 25 Apr 2025 23:13:27 +0800 Subject: [PATCH] Provide better impacts for fields indexed with IndexOptions.DOCS (#14511) Co-Authored-by: expani --- lucene/CHANGES.txt | 2 ++ .../lucene101/Lucene101PostingsReader.java | 19 ++++++++++++------- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/lucene/CHANGES.txt b/lucene/CHANGES.txt index 4c6e0f136f73..69bfcb56a96c 100644 --- a/lucene/CHANGES.txt +++ b/lucene/CHANGES.txt @@ -61,6 +61,8 @@ Bug Fixes * GITHUB#14523, GITHUB#14530: Correct TermOrdValComparator competitive iterator so that it forces sparse field iteration to be at least scoring window baseline when doing intoBitSet. (Ben Trent, Adrien Grand) +* GITHUB#14445: Provide better impacts for fields indexed with IndexOptions.DOCS GITHUB#14511 (Aniketh Jain) + ======================= Lucene 10.2.0 ======================= API Changes diff --git a/lucene/core/src/java/org/apache/lucene/codecs/lucene101/Lucene101PostingsReader.java b/lucene/core/src/java/org/apache/lucene/codecs/lucene101/Lucene101PostingsReader.java index 052e281ca567..9141ad5133dd 100644 --- a/lucene/core/src/java/org/apache/lucene/codecs/lucene101/Lucene101PostingsReader.java +++ b/lucene/core/src/java/org/apache/lucene/codecs/lucene101/Lucene101PostingsReader.java @@ -73,6 +73,10 @@ public final class Lucene101PostingsReader extends PostingsReaderBase { private static final List DUMMY_IMPACTS = Collections.singletonList(new Impact(Integer.MAX_VALUE, 1L)); + // We stopped storing a placeholder impact with freq=1 for fields with DOCS after 9.12.0 + private static final List DUMMY_IMPACTS_NO_FREQS = + Collections.singletonList(new Impact(1, 1L)); + private final IndexInput docIn; private final IndexInput posIn; private final IndexInput payIn; @@ -1328,13 +1332,14 @@ public int getDocIdUpTo(int level) { @Override public List getImpacts(int level) { - if (indexHasFreq) { - if (level == 0 && level0LastDocID != NO_MORE_DOCS) { - return readImpacts(level0SerializedImpacts, level0Impacts); - } - if (level == 1) { - return readImpacts(level1SerializedImpacts, level1Impacts); - } + if (indexHasFreq == false) { + return DUMMY_IMPACTS_NO_FREQS; + } + if (level == 0 && level0LastDocID != NO_MORE_DOCS) { + return readImpacts(level0SerializedImpacts, level0Impacts); + } + if (level == 1) { + return readImpacts(level1SerializedImpacts, level1Impacts); } return DUMMY_IMPACTS; }