LUCENE-8374 part 4/4: Reduce reads for sparse DocValues

Offset and index jump-table for norm blocks.
This commit is contained in:
Toke Eskildsen 2018-12-03 14:30:30 +01:00
parent 7949b98f80
commit e356d793ca
1 changed files with 6 additions and 2 deletions

View File

@ -45,6 +45,7 @@ final class Lucene70NormsProducer extends NormsProducer implements Cloneable {
private final Map<Integer,NormsEntry> norms = new HashMap<>();
private final int maxDoc;
private IndexInput data;
private final IndexedDISICacheFactory disiCacheFactory = new IndexedDISICacheFactory();
private boolean merging;
private Map<Integer, IndexInput> disiInputs;
private Map<Integer, RandomAccessInput> dataInputs;
@ -293,7 +294,9 @@ final class Lucene70NormsProducer extends NormsProducer implements Cloneable {
} else {
// sparse
final IndexInput disiInput = getDisiInput(field, entry);
final IndexedDISI disi = new IndexedDISI(disiInput, entry.numDocsWithField);
final IndexedDISI disi = disiCacheFactory.createCachedIndexedDISI(
disiInput, entry.docsWithFieldOffset + entry.docsWithFieldLength, entry.numDocsWithField, field.name);
if (entry.bytesPerNorm == 0) {
return new SparseNormsIterator(disi) {
@Override
@ -342,11 +345,12 @@ final class Lucene70NormsProducer extends NormsProducer implements Cloneable {
@Override
public void close() throws IOException {
data.close();
disiCacheFactory.releaseAll();
}
@Override
public long ramBytesUsed() {
return 64L * norms.size(); // good enough
return 64L * norms.size() + disiCacheFactory.ramBytesUsed(); // good enough
}
@Override