|
27 | 27 | import org.apache.lucene.codecs.lucene99.Lucene99FlatVectorsWriter; |
28 | 28 | import org.apache.lucene.index.SegmentReadState; |
29 | 29 | import org.apache.lucene.index.SegmentWriteState; |
| 30 | +import org.apache.lucene.store.FlushInfo; |
| 31 | +import org.apache.lucene.store.IOContext; |
| 32 | +import org.apache.lucene.store.MergeInfo; |
| 33 | +import org.apache.lucene.store.ReadAdvice; |
30 | 34 |
|
31 | 35 | import java.io.IOException; |
| 36 | +import java.util.Optional; |
| 37 | +import java.util.Set; |
32 | 38 |
|
33 | 39 | /** |
34 | 40 | * Copied from Lucene99FlatVectorsFormat in Lucene 10.1 |
@@ -61,22 +67,62 @@ public FlatVectorsWriter fieldsWriter(SegmentWriteState state) throws IOExceptio |
61 | 67 | return new Lucene99FlatVectorsWriter(state, vectorsScorer); |
62 | 68 | } |
63 | 69 |
|
| 70 | + private static final IOContext DIRECT_IO_CONTEXT = new IOContext() { |
| 71 | + @Override |
| 72 | + public Context context() { |
| 73 | + return Context.DEFAULT; |
| 74 | + } |
| 75 | + |
| 76 | + @Override |
| 77 | + public MergeInfo mergeInfo() { |
| 78 | + return null; |
| 79 | + } |
| 80 | + |
| 81 | + @Override |
| 82 | + public FlushInfo flushInfo() { |
| 83 | + return null; |
| 84 | + } |
| 85 | + |
| 86 | + @Override |
| 87 | + public Set<FileOpenHint> hints() { |
| 88 | + return Set.of(DirectIOHint.INSTANCE); |
| 89 | + } |
| 90 | + |
| 91 | + @Override |
| 92 | + public IOContext withHints(FileOpenHint... hints) { |
| 93 | + return this; |
| 94 | + } |
| 95 | + |
| 96 | + @Override |
| 97 | + public Optional<ReadAdvice> readAdvice() { |
| 98 | + return Optional.empty(); |
| 99 | + } |
| 100 | + |
| 101 | + @Override |
| 102 | + public IOContext withReadAdvice(ReadAdvice advice) { |
| 103 | + return this; |
| 104 | + } |
| 105 | + }; |
| 106 | + |
64 | 107 | @Override |
65 | 108 | public FlatVectorsReader fieldsReader(SegmentReadState state) throws IOException { |
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 | | - } |
| 109 | + SegmentReadState directIOState = new SegmentReadState( |
| 110 | + state.directory, |
| 111 | + state.segmentInfo, |
| 112 | + state.fieldInfos, |
| 113 | + DIRECT_IO_CONTEXT, |
| 114 | + state.segmentSuffix |
| 115 | + ); |
| 116 | + // Use mmap for merges and direct I/O for searches. |
| 117 | + // TODO: Open the mmap file with sequential access instead of random (current behavior). |
| 118 | + return new MergeReaderWrapper( |
| 119 | + new Lucene99FlatVectorsReader(directIOState, vectorsScorer), |
| 120 | + new Lucene99FlatVectorsReader(state, vectorsScorer) |
| 121 | + ); |
76 | 122 | } |
77 | 123 |
|
78 | 124 | @Override |
79 | 125 | public String toString() { |
80 | | - return "ES818FlatVectorsFormat(" + "vectorsScorer=" + vectorsScorer + ')'; |
| 126 | + return "Lucene99FlatVectorsFormat(" + "vectorsScorer=" + vectorsScorer + ')'; |
81 | 127 | } |
82 | 128 | } |
0 commit comments