@@ -257,13 +257,13 @@ public void mergeOneField(FieldInfo fieldInfo, MergeState mergeState) throws IOE
257257 @ Override
258258 public CloseableRandomVectorScorerSupplier mergeOneFieldToIndex (
259259 FieldInfo fieldInfo , MergeState mergeState ) throws IOException {
260- long vectorDataOffset = alignOutput (vectorData , fieldInfo .getVectorEncoding ());
261260 IndexOutput tempVectorData =
262261 segmentWriteState .directory .createTempOutput (
263262 vectorData .getName (), "temp" , segmentWriteState .context );
264263 IndexInput vectorDataInput = null ;
265264 try {
266265 // write the vector data to a temporary file
266+ long tempVectorDataOffset = alignOutput (tempVectorData , fieldInfo .getVectorEncoding ());
267267 DocsWithFieldSet docsWithField =
268268 switch (fieldInfo .getVectorEncoding ()) {
269269 case BYTE ->
@@ -277,6 +277,8 @@ public CloseableRandomVectorScorerSupplier mergeOneFieldToIndex(
277277 KnnVectorsWriter .MergedVectorValues .mergeFloatVectorValues (
278278 fieldInfo , mergeState ));
279279 };
280+ long vectorDataLength = tempVectorData .getFilePointer () - tempVectorDataOffset ;
281+
280282 CodecUtil .writeFooter (tempVectorData );
281283 IOUtils .close (tempVectorData );
282284
@@ -288,10 +290,13 @@ public CloseableRandomVectorScorerSupplier mergeOneFieldToIndex(
288290 tempVectorData .getName (),
289291 IOContext .DEFAULT .withHints (
290292 FileTypeHint .DATA , FileDataHint .KNN_VECTORS , DataAccessHint .RANDOM ));
293+ vectorDataInput .seek (tempVectorDataOffset );
294+
291295 // copy the temporary file vectors to the actual data file
292- vectorData .copyBytes (vectorDataInput , vectorDataInput .length () - CodecUtil .footerLength ());
296+ long vectorDataOffset = alignOutput (vectorData , fieldInfo .getVectorEncoding ());
297+ vectorData .copyBytes (vectorDataInput , vectorDataLength );
298+
293299 CodecUtil .retrieveChecksum (vectorDataInput );
294- long vectorDataLength = vectorData .getFilePointer () - vectorDataOffset ;
295300 writeMeta (
296301 fieldInfo ,
297302 segmentWriteState .segmentInfo .maxDoc (),
@@ -310,7 +315,8 @@ public CloseableRandomVectorScorerSupplier mergeOneFieldToIndex(
310315 new OffHeapByteVectorValues .DenseOffHeapVectorValues (
311316 fieldInfo .getVectorDimension (),
312317 docsWithField .cardinality (),
313- finalVectorDataInput ,
318+ finalVectorDataInput .slice (
319+ "temp-vector-data" , tempVectorDataOffset , vectorDataLength ),
314320 fieldInfo .getVectorDimension () * Byte .BYTES ,
315321 vectorsScorer ,
316322 fieldInfo .getVectorSimilarityFunction ()));
@@ -320,7 +326,8 @@ public CloseableRandomVectorScorerSupplier mergeOneFieldToIndex(
320326 new OffHeapFloatVectorValues .DenseOffHeapVectorValues (
321327 fieldInfo .getVectorDimension (),
322328 docsWithField .cardinality (),
323- finalVectorDataInput ,
329+ finalVectorDataInput .slice (
330+ "temp-vector-data" , tempVectorDataOffset , vectorDataLength ),
324331 fieldInfo .getVectorDimension () * Float .BYTES ,
325332 vectorsScorer ,
326333 fieldInfo .getVectorSimilarityFunction ()));
0 commit comments