From 18fcfbdca7ccd39c1ea3217debd602f8af977d87 Mon Sep 17 00:00:00 2001 From: lvca Date: Wed, 28 Jun 2023 16:16:30 -0400 Subject: [PATCH] fix: hnsw -> init level connections under the control of maxM0 and maxM Applied the PR from https://github.com/jelmerk/hnswlib/pull/54 --- .../main/java/com/arcadedb/index/vector/HnswVectorIndex.java | 3 ++- .../java/com/arcadedb/index/vector/HnswVectorIndexRAM.java | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/engine/src/main/java/com/arcadedb/index/vector/HnswVectorIndex.java b/engine/src/main/java/com/arcadedb/index/vector/HnswVectorIndex.java index a43e080ba..ea200398c 100644 --- a/engine/src/main/java/com/arcadedb/index/vector/HnswVectorIndex.java +++ b/engine/src/main/java/com/arcadedb/index/vector/HnswVectorIndex.java @@ -34,6 +34,7 @@ import com.arcadedb.index.IndexInternal; import com.arcadedb.index.TypeIndex; import com.arcadedb.index.lsm.LSMTreeIndexAbstract; +import com.arcadedb.index.vector.distance.DistanceFunctionFactory; import com.arcadedb.log.LogManager; import com.arcadedb.schema.EmbeddedSchema; import com.arcadedb.schema.IndexBuilder; @@ -210,7 +211,7 @@ public boolean add(Vertex vertex) { final ArrayList[] connections = new ArrayList[randomLevel + 1]; for (int level = 0; level <= randomLevel; level++) { - final int levelM = randomLevel == 0 ? maxM0 : maxM; + final int levelM = level == 0 ? maxM0 : maxM; connections[level] = new ArrayList<>(levelM); } diff --git a/engine/src/main/java/com/arcadedb/index/vector/HnswVectorIndexRAM.java b/engine/src/main/java/com/arcadedb/index/vector/HnswVectorIndexRAM.java index 98d504684..420f794d0 100644 --- a/engine/src/main/java/com/arcadedb/index/vector/HnswVectorIndexRAM.java +++ b/engine/src/main/java/com/arcadedb/index/vector/HnswVectorIndexRAM.java @@ -211,7 +211,7 @@ public boolean add(TItem item) { IntArrayList[] connections = new IntArrayList[randomLevel + 1]; for (int level = 0; level <= randomLevel; level++) { - int levelM = randomLevel == 0 ? maxM0 : maxM; + int levelM = level == 0 ? maxM0 : maxM; connections[level] = new IntArrayList(levelM); }