You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by so...@apache.org on 2023/12/15 18:24:11 UTC

(lucene) branch main updated: Use hppc IntIntHashMap to avoid Integer box/unbox when remapping vector ordinals during merge (#12950)

This is an automated email from the ASF dual-hosted git repository.

sokolov pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/lucene.git


The following commit(s) were added to refs/heads/main by this push:
     new 49d521145de Use hppc IntIntHashMap to avoid Integer box/unbox when remapping vector ordinals during merge (#12950)
49d521145de is described below

commit 49d521145dede343c83614b2517380bf1bfc1d38
Author: Michael Sokolov <so...@falutin.net>
AuthorDate: Fri Dec 15 14:24:05 2023 -0400

    Use hppc IntIntHashMap to avoid Integer box/unbox when remapping vector ordinals during merge (#12950)
---
 .../apache/lucene/util/hnsw/IncrementalHnswGraphMerger.java    | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/lucene/core/src/java/org/apache/lucene/util/hnsw/IncrementalHnswGraphMerger.java b/lucene/core/src/java/org/apache/lucene/util/hnsw/IncrementalHnswGraphMerger.java
index ddcbfdaf22d..9c547a8b703 100644
--- a/lucene/core/src/java/org/apache/lucene/util/hnsw/IncrementalHnswGraphMerger.java
+++ b/lucene/core/src/java/org/apache/lucene/util/hnsw/IncrementalHnswGraphMerger.java
@@ -19,7 +19,6 @@ package org.apache.lucene.util.hnsw;
 import static org.apache.lucene.search.DocIdSetIterator.NO_MORE_DOCS;
 
 import java.io.IOException;
-import java.util.Map;
 import org.apache.lucene.codecs.HnswGraphProvider;
 import org.apache.lucene.codecs.KnnVectorsReader;
 import org.apache.lucene.codecs.perfield.PerFieldKnnVectorsFormat;
@@ -30,9 +29,9 @@ import org.apache.lucene.index.MergeState;
 import org.apache.lucene.search.DocIdSetIterator;
 import org.apache.lucene.util.BitSet;
 import org.apache.lucene.util.Bits;
-import org.apache.lucene.util.CollectionUtil;
 import org.apache.lucene.util.FixedBitSet;
 import org.apache.lucene.util.InfoStream;
+import org.apache.lucene.util.hppc.IntIntHashMap;
 
 /**
  * This selects the biggest Hnsw graph from the provided merge state and initializes a new
@@ -162,7 +161,7 @@ public class IncrementalHnswGraphMerger implements HnswGraphMerger {
       case FLOAT32 -> initializerIterator = initReader.getFloatVectorValues(fieldInfo.name);
     }
 
-    Map<Integer, Integer> newIdToOldOrdinal = CollectionUtil.newHashMap(initGraphSize);
+    IntIntHashMap newIdToOldOrdinal = new IntIntHashMap(initGraphSize);
     int oldOrd = 0;
     int maxNewDocID = -1;
     for (int oldId = initializerIterator.nextDoc();
@@ -182,9 +181,10 @@ public class IncrementalHnswGraphMerger implements HnswGraphMerger {
     for (int newDocId = mergedVectorIterator.nextDoc();
         newDocId <= maxNewDocID;
         newDocId = mergedVectorIterator.nextDoc()) {
-      if (newIdToOldOrdinal.containsKey(newDocId)) {
+      int hashDocIndex = newIdToOldOrdinal.indexOf(newDocId);
+      if (newIdToOldOrdinal.indexExists(hashDocIndex)) {
         initializedNodes.set(newOrd);
-        oldToNewOrdinalMap[newIdToOldOrdinal.get(newDocId)] = newOrd;
+        oldToNewOrdinalMap[newIdToOldOrdinal.indexGet(hashDocIndex)] = newOrd;
       }
       newOrd++;
     }