Skip to content

Commit 0d0b436

Browse files
committed
iter
1 parent c983399 commit 0d0b436

File tree

3 files changed

+21
-22
lines changed

3 files changed

+21
-22
lines changed

server/src/main/java/org/elasticsearch/index/codec/vectors/diskbbq/ES920DiskBBQVectorsFormat.java

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -14,12 +14,15 @@
1414
import org.apache.lucene.codecs.KnnVectorsWriter;
1515
import org.apache.lucene.codecs.hnsw.FlatVectorScorerUtil;
1616
import org.apache.lucene.codecs.hnsw.FlatVectorsFormat;
17+
import org.apache.lucene.codecs.hnsw.FlatVectorsReader;
1718
import org.apache.lucene.codecs.lucene99.Lucene99FlatVectorsFormat;
1819
import org.apache.lucene.index.SegmentReadState;
1920
import org.apache.lucene.index.SegmentWriteState;
21+
import org.elasticsearch.common.util.Maps;
2022
import org.elasticsearch.index.codec.vectors.OptimizedScalarQuantizer;
2123

2224
import java.io.IOException;
25+
import java.util.Collections;
2326
import java.util.Map;
2427

2528
/**
@@ -119,11 +122,12 @@ public KnnVectorsWriter fieldsWriter(SegmentWriteState state) throws IOException
119122

120123
@Override
121124
public KnnVectorsReader fieldsReader(SegmentReadState state) throws IOException {
122-
return new ES920DiskBBQVectorsReader(state, f -> {
123-
var format = supportedFormats.get(f);
124-
if (format == null) throw new IllegalArgumentException("Unknown format " + f);
125-
return format;
126-
});
125+
Map<String, FlatVectorsReader> readers = Maps.newHashMapWithExpectedSize(supportedFormats.size());
126+
for (var fe : supportedFormats.entrySet()) {
127+
readers.put(fe.getKey(), fe.getValue().fieldsReader(state));
128+
}
129+
130+
return new ES920DiskBBQVectorsReader(state, Collections.unmodifiableMap(readers));
127131
}
128132

129133
@Override

server/src/main/java/org/elasticsearch/index/codec/vectors/diskbbq/ES920DiskBBQVectorsReader.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99

1010
package org.elasticsearch.index.codec.vectors.diskbbq;
1111

12-
import org.apache.lucene.codecs.hnsw.FlatVectorsFormat;
12+
import org.apache.lucene.codecs.hnsw.FlatVectorsReader;
1313
import org.apache.lucene.index.FieldInfo;
1414
import org.apache.lucene.index.SegmentReadState;
1515
import org.apache.lucene.index.VectorSimilarityFunction;
@@ -26,7 +26,6 @@
2626

2727
import java.io.IOException;
2828
import java.util.Map;
29-
import java.util.function.Function;
3029

3130
import static org.apache.lucene.codecs.lucene102.Lucene102BinaryQuantizedVectorsFormat.QUERY_BITS;
3231
import static org.apache.lucene.index.VectorSimilarityFunction.COSINE;
@@ -41,8 +40,8 @@
4140
*/
4241
public class ES920DiskBBQVectorsReader extends IVFVectorsReader implements OffHeapStats {
4342

44-
public ES920DiskBBQVectorsReader(SegmentReadState state, Function<String, FlatVectorsFormat> formatLookup) throws IOException {
45-
super(state, f -> formatLookup.apply(f).fieldsReader(state));
43+
public ES920DiskBBQVectorsReader(SegmentReadState state, Map<String, FlatVectorsReader> rawVectorsReader) throws IOException {
44+
super(state, rawVectorsReader);
4645
}
4746

4847
CentroidIterator getPostingListPrefetchIterator(CentroidIterator centroidIterator, IndexInput postingListSlice) throws IOException {

server/src/main/java/org/elasticsearch/index/codec/vectors/diskbbq/IVFVectorsReader.java

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,13 @@
2929
import org.apache.lucene.store.IndexInput;
3030
import org.apache.lucene.util.BitSet;
3131
import org.apache.lucene.util.Bits;
32-
import org.apache.lucene.util.IOFunction;
3332
import org.elasticsearch.core.IOUtils;
3433
import org.elasticsearch.search.vectors.IVFKnnSearchStrategy;
3534

3635
import java.io.Closeable;
3736
import java.io.IOException;
3837
import java.util.ArrayList;
3938
import java.util.Collections;
40-
import java.util.HashMap;
4139
import java.util.List;
4240
import java.util.Map;
4341

@@ -53,11 +51,10 @@ public abstract class IVFVectorsReader extends KnnVectorsReader {
5351
private final SegmentReadState state;
5452
private final FieldInfos fieldInfos;
5553
protected final IntObjectHashMap<FieldEntry> fields;
56-
private final IOFunction<String, FlatVectorsReader> rawVectorReaders;
57-
private final Map<String, FlatVectorsReader> loadedReaders = new HashMap<>();
54+
private final Map<String, FlatVectorsReader> rawVectorReaders;
5855

5956
@SuppressWarnings("this-escape")
60-
protected IVFVectorsReader(SegmentReadState state, IOFunction<String, FlatVectorsReader> rawVectorReaders) throws IOException {
57+
protected IVFVectorsReader(SegmentReadState state, Map<String, FlatVectorsReader> rawVectorReaders) throws IOException {
6158
this.state = state;
6259
this.fieldInfos = state.fieldInfos;
6360
this.fields = new IntObjectHashMap<>();
@@ -222,20 +219,19 @@ private static VectorEncoding readVectorEncoding(DataInput input) throws IOExcep
222219

223220
@Override
224221
public final void checkIntegrity() throws IOException {
225-
for (var reader : loadedReaders.values()) {
222+
for (var reader : rawVectorReaders.values()) {
226223
reader.checkIntegrity();
227224
}
228225
CodecUtil.checksumEntireFile(ivfCentroids);
229226
CodecUtil.checksumEntireFile(ivfClusters);
230227
}
231228

232-
private synchronized FlatVectorsReader getReaderForField(String field) throws IOException {
229+
private synchronized FlatVectorsReader getReaderForField(String field) {
233230
String formatName = fields.get(fieldInfos.fieldInfo(field).number).rawVectorFormatName;
234-
FlatVectorsReader reader = loadedReaders.get(formatName);
235-
if (reader == null) {
236-
reader = rawVectorReaders.apply(formatName);
237-
loadedReaders.put(formatName, reader);
238-
}
231+
FlatVectorsReader reader = rawVectorReaders.get(formatName);
232+
if (reader == null) throw new IllegalArgumentException(
233+
"Could not find raw vector format [" + formatName + "] for field [" + field + "]"
234+
);
239235
return reader;
240236
}
241237

@@ -343,7 +339,7 @@ public final void search(String field, byte[] target, KnnCollector knnCollector,
343339

344340
@Override
345341
public void close() throws IOException {
346-
List<Closeable> closeables = new ArrayList<>(loadedReaders.values());
342+
List<Closeable> closeables = new ArrayList<>(rawVectorReaders.values());
347343
Collections.addAll(closeables, ivfCentroids, ivfClusters);
348344
IOUtils.close(closeables);
349345
}

0 commit comments

Comments
 (0)