You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by jp...@apache.org on 2023/11/22 09:06:15 UTC
(lucene) branch branch_9x updated: Skip decoding tail freqs when they are not needed. (#12832)
This is an automated email from the ASF dual-hosted git repository.
jpountz pushed a commit to branch branch_9x
in repository https://gitbox.apache.org/repos/asf/lucene.git
The following commit(s) were added to refs/heads/branch_9x by this push:
new c0cfae7ee98 Skip decoding tail freqs when they are not needed. (#12832)
c0cfae7ee98 is described below
commit c0cfae7ee98933b6644c24fd9ee7a8f4c5044441
Author: Adrien Grand <jp...@gmail.com>
AuthorDate: Wed Nov 22 10:05:41 2023 +0100
Skip decoding tail freqs when they are not needed. (#12832)
When we moved to group-varint for tail postings, we stop interleaving docs and
freqs and instead wrote all docs first, then all freqs. This means that we can
now skip decoding frequencies when they are not needed.
---
.../codecs/lucene99/Lucene99PostingsReader.java | 23 +++++++++++++++-------
1 file changed, 16 insertions(+), 7 deletions(-)
diff --git a/lucene/core/src/java/org/apache/lucene/codecs/lucene99/Lucene99PostingsReader.java b/lucene/core/src/java/org/apache/lucene/codecs/lucene99/Lucene99PostingsReader.java
index 52cb999aafd..599d1f939ce 100644
--- a/lucene/core/src/java/org/apache/lucene/codecs/lucene99/Lucene99PostingsReader.java
+++ b/lucene/core/src/java/org/apache/lucene/codecs/lucene99/Lucene99PostingsReader.java
@@ -142,10 +142,15 @@ public final class Lucene99PostingsReader extends PostingsReaderBase {
/** Read values that have been written using variable-length encoding instead of bit-packing. */
static void readVIntBlock(
- IndexInput docIn, long[] docBuffer, long[] freqBuffer, int num, boolean indexHasFreq)
+ IndexInput docIn,
+ long[] docBuffer,
+ long[] freqBuffer,
+ int num,
+ boolean indexHasFreq,
+ boolean decodeFreq)
throws IOException {
GroupVIntReader.readValues(docIn, docBuffer, num);
- if (indexHasFreq) {
+ if (indexHasFreq && decodeFreq) {
for (int i = 0; i < num; ++i) {
freqBuffer[i] = docBuffer[i] & 0x01;
docBuffer[i] >>= 1;
@@ -153,6 +158,10 @@ public final class Lucene99PostingsReader extends PostingsReaderBase {
freqBuffer[i] = docIn.readVInt();
}
}
+ } else if (indexHasFreq) {
+ for (int i = 0; i < num; ++i) {
+ docBuffer[i] >>= 1;
+ }
}
}
@@ -466,7 +475,7 @@ public final class Lucene99PostingsReader extends PostingsReaderBase {
blockUpto++;
} else {
// Read vInts:
- readVIntBlock(docIn, docBuffer, freqBuffer, left, indexHasFreq);
+ readVIntBlock(docIn, docBuffer, freqBuffer, left, indexHasFreq, needsFreq);
prefixSum(docBuffer, left, accum);
docBuffer[left] = NO_MORE_DOCS;
blockUpto += left;
@@ -759,7 +768,7 @@ public final class Lucene99PostingsReader extends PostingsReaderBase {
docBuffer[1] = NO_MORE_DOCS;
blockUpto++;
} else {
- readVIntBlock(docIn, docBuffer, freqBuffer, left, true);
+ readVIntBlock(docIn, docBuffer, freqBuffer, left, true, true);
prefixSum(docBuffer, left, accum);
docBuffer[left] = NO_MORE_DOCS;
blockUpto += left;
@@ -1146,7 +1155,7 @@ public final class Lucene99PostingsReader extends PostingsReaderBase {
}
blockUpto += BLOCK_SIZE;
} else {
- readVIntBlock(docIn, docBuffer, freqBuffer, left, indexHasFreqs);
+ readVIntBlock(docIn, docBuffer, freqBuffer, left, indexHasFreqs, true);
prefixSum(docBuffer, left, accum);
docBuffer[left] = NO_MORE_DOCS;
blockUpto += left;
@@ -1354,7 +1363,7 @@ public final class Lucene99PostingsReader extends PostingsReaderBase {
forDeltaUtil.decodeAndPrefixSum(docIn, accum, docBuffer);
pforUtil.decode(docIn, freqBuffer);
} else {
- readVIntBlock(docIn, docBuffer, freqBuffer, left, true);
+ readVIntBlock(docIn, docBuffer, freqBuffer, left, true, true);
prefixSum(docBuffer, left, accum);
docBuffer[left] = NO_MORE_DOCS;
}
@@ -1744,7 +1753,7 @@ public final class Lucene99PostingsReader extends PostingsReaderBase {
false; // freq block will be loaded lazily when necessary, we don't load it here
}
} else {
- readVIntBlock(docIn, docBuffer, freqBuffer, left, indexHasFreq);
+ readVIntBlock(docIn, docBuffer, freqBuffer, left, indexHasFreq, true);
prefixSum(docBuffer, left, accum);
docBuffer[left] = NO_MORE_DOCS;
}