@@ -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