Skip to content

Commit 8228bb9

Browse files
committed
adapt code and comment
1 parent f116869 commit 8228bb9

File tree

3 files changed

+30
-9
lines changed

3 files changed

+30
-9
lines changed

server/src/main/java/org/elasticsearch/index/codec/vectors/es818/DirectIOLucene99FlatVectorsFormat.java

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,9 +63,16 @@ public FlatVectorsWriter fieldsWriter(SegmentWriteState state) throws IOExceptio
6363

6464
@Override
6565
public FlatVectorsReader fieldsReader(SegmentReadState state) throws IOException {
66-
return new MergeReaderWrapper(
67-
new DirectIOLucene99FlatVectorsReader(state, vectorsScorer),
68-
new Lucene99FlatVectorsReader(state, vectorsScorer));
66+
if (DirectIOLucene99FlatVectorsReader.shouldUseDirectIO(state)) {
67+
// Use mmap for merges and direct I/O for searches.
68+
// TODO: Open the mmap file with sequential access instead of random (current behavior).
69+
return new MergeReaderWrapper(
70+
new DirectIOLucene99FlatVectorsReader(state, vectorsScorer),
71+
new Lucene99FlatVectorsReader(state, vectorsScorer)
72+
);
73+
} else {
74+
return new Lucene99FlatVectorsReader(state, vectorsScorer);
75+
}
6976
}
7077

7178
@Override

server/src/main/java/org/elasticsearch/index/codec/vectors/es818/DirectIOLucene99FlatVectorsReader.java

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -85,6 +85,10 @@ public DirectIOLucene99FlatVectorsReader(SegmentReadState state, FlatVectorsScor
8585
}
8686
}
8787

88+
public static boolean shouldUseDirectIO(SegmentReadState state) {
89+
return USE_DIRECT_IO && state.directory instanceof DirectIOIndexInputSupplier;
90+
}
91+
8892
private int readMetadata(SegmentReadState state) throws IOException {
8993
String metaFileName = IndexFileNames.segmentFileName(
9094
state.segmentInfo.name,
@@ -122,11 +126,9 @@ private static IndexInput openDataInput(
122126
) throws IOException {
123127
String fileName = IndexFileNames.segmentFileName(state.segmentInfo.name, state.segmentSuffix, fileExtension);
124128
// use direct IO for accessing raw vector data for searches
125-
IndexInput in = USE_DIRECT_IO
126-
&& context.context() == IOContext.Context.DEFAULT
127-
&& state.directory instanceof DirectIOIndexInputSupplier did
128-
? did.openInputDirect(fileName, context)
129-
: state.directory.openInput(fileName, context);
129+
IndexInput in = USE_DIRECT_IO && state.directory instanceof DirectIOIndexInputSupplier did
130+
? did.openInputDirect(fileName, context)
131+
: state.directory.openInput(fileName, context);
130132
boolean success = false;
131133
try {
132134
int versionVectorData = CodecUtil.checkIndexHeader(

server/src/main/java/org/elasticsearch/index/codec/vectors/es818/MergeReaderWrapper.java

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,11 @@
1212
import org.apache.lucene.codecs.hnsw.FlatVectorsReader;
1313
import org.apache.lucene.index.ByteVectorValues;
1414
import org.apache.lucene.index.FloatVectorValues;
15+
import org.apache.lucene.search.KnnCollector;
1516
import org.apache.lucene.util.Accountable;
16-
import org.apache.lucene.util.IOUtils;
17+
import org.apache.lucene.util.Bits;
1718
import org.apache.lucene.util.hnsw.RandomVectorScorer;
19+
import org.elasticsearch.core.IOUtils;
1820

1921
import java.io.IOException;
2022
import java.util.Collection;
@@ -70,6 +72,16 @@ public Collection<Accountable> getChildResources() {
7072
return mainReader.getChildResources();
7173
}
7274

75+
@Override
76+
public void search(String field, float[] target, KnnCollector knnCollector, Bits acceptDocs) throws IOException {
77+
mainReader.search(field, target, knnCollector, acceptDocs);
78+
}
79+
80+
@Override
81+
public void search(String field, byte[] target, KnnCollector knnCollector, Bits acceptDocs) throws IOException {
82+
mainReader.search(field, target, knnCollector, acceptDocs);
83+
}
84+
7385
@Override
7486
public void close() throws IOException {
7587
IOUtils.close(mainReader, mergeReader);

0 commit comments

Comments
 (0)