summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGeir Storli <geirst@verizonmedia.com>2020-06-19 11:47:24 +0000
committerGeir Storli <geirst@verizonmedia.com>2020-06-19 11:47:24 +0000
commitcdc65c6b2b0734fb97b7f466ba0139ce6406559c (patch)
tree033a09e26f015211ba1d5e49721f4277dd04151e
parent2a4d87ba45101d5db0fe906846f99d4ea9f1334c (diff)
Add flag to enable multi-threaded indexing for a hnsw index.
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/derived/AttributeFields.java1
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/document/HnswIndexParams.java19
-rw-r--r--config-model/src/main/javacc/SDParser.jj4
-rw-r--r--config-model/src/test/derived/advanced/attributes.cfg1
-rw-r--r--config-model/src/test/derived/array_of_struct_attribute/attributes.cfg2
-rw-r--r--config-model/src/test/derived/attributeprefetch/attributes.cfg18
-rw-r--r--config-model/src/test/derived/attributes/attributes.cfg18
-rw-r--r--config-model/src/test/derived/complex/attributes.cfg9
-rw-r--r--config-model/src/test/derived/hnsw_index/attributes.cfg2
-rw-r--r--config-model/src/test/derived/hnsw_index/test.sd1
-rw-r--r--config-model/src/test/derived/imported_position_field/attributes.cfg2
-rw-r--r--config-model/src/test/derived/imported_struct_fields/attributes.cfg8
-rw-r--r--config-model/src/test/derived/importedfields/attributes.cfg8
-rw-r--r--config-model/src/test/derived/inheritance/attributes.cfg3
-rw-r--r--config-model/src/test/derived/inheritfromparent/attributes.cfg1
-rw-r--r--config-model/src/test/derived/map_attribute/attributes.cfg3
-rw-r--r--config-model/src/test/derived/map_of_struct_attribute/attributes.cfg5
-rw-r--r--config-model/src/test/derived/music/attributes.cfg11
-rw-r--r--config-model/src/test/derived/newrank/attributes.cfg10
-rw-r--r--config-model/src/test/derived/predicate_attribute/attributes.cfg1
-rw-r--r--config-model/src/test/derived/prefixexactattribute/attributes.cfg2
-rw-r--r--config-model/src/test/derived/reference_fields/attributes.cfg3
-rw-r--r--config-model/src/test/derived/sorting/attributes.cfg3
-rw-r--r--config-model/src/test/derived/tensor/attributes.cfg5
-rw-r--r--config-model/src/test/derived/types/attributes.cfg13
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/document/HnswIndexParamsTestCase.java8
-rw-r--r--configdefinitions/src/vespa/attributes.def2
27 files changed, 159 insertions, 4 deletions
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/derived/AttributeFields.java b/config-model/src/main/java/com/yahoo/searchdefinition/derived/AttributeFields.java
index 004e44a7659..210f54de6a6 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/derived/AttributeFields.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/derived/AttributeFields.java
@@ -250,6 +250,7 @@ public class AttributeFields extends Derived implements AttributesConfig.Produce
ib.hnsw.neighborstoexploreatinsert(params.neighborsToExploreAtInsert());
var dm = AttributesConfig.Attribute.Index.Hnsw.Distancemetric.Enum.valueOf(dma.toString());
ib.hnsw.distancemetric(dm);
+ ib.hnsw.multithreadedindexing(params.multiThreadedIndexing());
aaB.index(ib);
}
return aaB;
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/document/HnswIndexParams.java b/config-model/src/main/java/com/yahoo/searchdefinition/document/HnswIndexParams.java
index 2f084d3e513..f4f4cedd2aa 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/document/HnswIndexParams.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/document/HnswIndexParams.java
@@ -16,10 +16,12 @@ public class HnswIndexParams {
private final Optional<Integer> maxLinksPerNode;
private final Optional<Integer> neighborsToExploreAtInsert;
+ private final Optional<Boolean> multiThreadedIndexing;
public static class Builder {
private Optional<Integer> maxLinksPerNode = Optional.empty();
private Optional<Integer> neighborsToExploreAtInsert = Optional.empty();
+ private Optional<Boolean> multiThreadedIndexing = Optional.empty();
public void setMaxLinksPerNode(int value) {
maxLinksPerNode = Optional.of(value);
@@ -27,20 +29,26 @@ public class HnswIndexParams {
public void setNeighborsToExploreAtInsert(int value) {
neighborsToExploreAtInsert = Optional.of(value);
}
+ public void setMultiThreadedIndexing(boolean value) {
+ multiThreadedIndexing = Optional.of(value);
+ }
public HnswIndexParams build() {
- return new HnswIndexParams(maxLinksPerNode, neighborsToExploreAtInsert);
+ return new HnswIndexParams(maxLinksPerNode, neighborsToExploreAtInsert, multiThreadedIndexing);
}
}
public HnswIndexParams() {
this.maxLinksPerNode = Optional.empty();
this.neighborsToExploreAtInsert = Optional.empty();
+ this.multiThreadedIndexing = Optional.empty();
}
public HnswIndexParams(Optional<Integer> maxLinksPerNode,
- Optional<Integer> neighborsToExploreAtInsert) {
+ Optional<Integer> neighborsToExploreAtInsert,
+ Optional<Boolean> multiThreadedIndexing) {
this.maxLinksPerNode = maxLinksPerNode;
this.neighborsToExploreAtInsert = neighborsToExploreAtInsert;
+ this.multiThreadedIndexing = multiThreadedIndexing;
}
/**
@@ -51,7 +59,8 @@ public class HnswIndexParams {
if (! other.isPresent()) return this;
HnswIndexParams rhs = other.get();
return new HnswIndexParams(rhs.maxLinksPerNode.or(() -> maxLinksPerNode),
- rhs.neighborsToExploreAtInsert.or(() -> neighborsToExploreAtInsert));
+ rhs.neighborsToExploreAtInsert.or(() -> neighborsToExploreAtInsert),
+ rhs.multiThreadedIndexing.or(() -> multiThreadedIndexing));
}
public int maxLinksPerNode() {
@@ -61,4 +70,8 @@ public class HnswIndexParams {
public int neighborsToExploreAtInsert() {
return neighborsToExploreAtInsert.orElse(DEFAULT_NEIGHBORS_TO_EXPLORE_AT_INSERT);
}
+
+ public boolean multiThreadedIndexing() {
+ return multiThreadedIndexing.orElse(false);
+ }
}
diff --git a/config-model/src/main/javacc/SDParser.jj b/config-model/src/main/javacc/SDParser.jj
index 75ef3a831e8..68dafc5e578 100644
--- a/config-model/src/main/javacc/SDParser.jj
+++ b/config-model/src/main/javacc/SDParser.jj
@@ -337,6 +337,7 @@ TOKEN :
| < MAXLINKSPERNODE: "max-links-per-node" >
| < DISTANCEMETRIC: "distance-metric" >
| < NEIGHBORSTOEXPLOREATINSERT: "neighbors-to-explore-at-insert" >
+| < MULTITHREADEDINDEXING: "multi-threaded-indexing" >
| < SUMMARYFEATURES_SL: "summary-features" (" ")* ":" (~["}","\n"])* ("\n")? >
| < SUMMARYFEATURES_ML: "summary-features" (<SEARCHLIB_SKIP>)? "{" (~["}"])* "}" >
| < SUMMARYFEATURES_ML_INHERITS: "summary-features inherits " (<IDENTIFIER>) (<SEARCHLIB_SKIP>)? "{" (~["}"])* "}" >
@@ -1841,7 +1842,8 @@ void hnswIndexBody(HnswIndexParams.Builder params) :
}
{
( <MAXLINKSPERNODE> <COLON> num = integer() { params.setMaxLinksPerNode(num); }
- | <NEIGHBORSTOEXPLOREATINSERT> <COLON> num = integer() { params.setNeighborsToExploreAtInsert(num); } )
+ | <NEIGHBORSTOEXPLOREATINSERT> <COLON> num = integer() { params.setNeighborsToExploreAtInsert(num); }
+ | <MULTITHREADEDINDEXING> { params.setMultiThreadedIndexing(true); } )
}
/**
diff --git a/config-model/src/test/derived/advanced/attributes.cfg b/config-model/src/test/derived/advanced/attributes.cfg
index 0217d957432..7f0c2400b9a 100644
--- a/config-model/src/test/derived/advanced/attributes.cfg
+++ b/config-model/src/test/derived/advanced/attributes.cfg
@@ -24,3 +24,4 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
diff --git a/config-model/src/test/derived/array_of_struct_attribute/attributes.cfg b/config-model/src/test/derived/array_of_struct_attribute/attributes.cfg
index 8391a8a9bdd..807b514c8d6 100644
--- a/config-model/src/test/derived/array_of_struct_attribute/attributes.cfg
+++ b/config-model/src/test/derived/array_of_struct_attribute/attributes.cfg
@@ -24,6 +24,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "elem_array.weight"
attribute[].datatype INT32
attribute[].collectiontype ARRAY
@@ -50,3 +51,4 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
diff --git a/config-model/src/test/derived/attributeprefetch/attributes.cfg b/config-model/src/test/derived/attributeprefetch/attributes.cfg
index 448f9a82d36..b872efa3db8 100644
--- a/config-model/src/test/derived/attributeprefetch/attributes.cfg
+++ b/config-model/src/test/derived/attributeprefetch/attributes.cfg
@@ -24,6 +24,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "multibyte"
attribute[].datatype INT8
attribute[].collectiontype ARRAY
@@ -50,6 +51,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "wsbyte"
attribute[].datatype INT8
attribute[].collectiontype WEIGHTEDSET
@@ -76,6 +78,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "singleint"
attribute[].datatype INT32
attribute[].collectiontype SINGLE
@@ -102,6 +105,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "multiint"
attribute[].datatype INT32
attribute[].collectiontype ARRAY
@@ -128,6 +132,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "wsint"
attribute[].datatype INT32
attribute[].collectiontype WEIGHTEDSET
@@ -154,6 +159,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "singlelong"
attribute[].datatype INT64
attribute[].collectiontype SINGLE
@@ -180,6 +186,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "multilong"
attribute[].datatype INT64
attribute[].collectiontype ARRAY
@@ -206,6 +213,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "wslong"
attribute[].datatype INT64
attribute[].collectiontype WEIGHTEDSET
@@ -232,6 +240,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "singlefloat"
attribute[].datatype FLOAT
attribute[].collectiontype SINGLE
@@ -258,6 +267,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "multifloat"
attribute[].datatype FLOAT
attribute[].collectiontype ARRAY
@@ -284,6 +294,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "wsfloat"
attribute[].datatype FLOAT
attribute[].collectiontype WEIGHTEDSET
@@ -310,6 +321,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "singledouble"
attribute[].datatype DOUBLE
attribute[].collectiontype SINGLE
@@ -336,6 +348,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "multidouble"
attribute[].datatype DOUBLE
attribute[].collectiontype ARRAY
@@ -362,6 +375,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "wsdouble"
attribute[].datatype DOUBLE
attribute[].collectiontype WEIGHTEDSET
@@ -388,6 +402,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "singlestring"
attribute[].datatype STRING
attribute[].collectiontype SINGLE
@@ -414,6 +429,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "multistring"
attribute[].datatype STRING
attribute[].collectiontype ARRAY
@@ -440,6 +456,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "wsstring"
attribute[].datatype STRING
attribute[].collectiontype WEIGHTEDSET
@@ -466,3 +483,4 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
diff --git a/config-model/src/test/derived/attributes/attributes.cfg b/config-model/src/test/derived/attributes/attributes.cfg
index d88c6b8b70a..750749de45c 100644
--- a/config-model/src/test/derived/attributes/attributes.cfg
+++ b/config-model/src/test/derived/attributes/attributes.cfg
@@ -24,6 +24,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "a2"
attribute[].datatype STRING
attribute[].collectiontype SINGLE
@@ -50,6 +51,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "a3"
attribute[].datatype STRING
attribute[].collectiontype SINGLE
@@ -76,6 +78,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "a5"
attribute[].datatype STRING
attribute[].collectiontype SINGLE
@@ -102,6 +105,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "a6"
attribute[].datatype STRING
attribute[].collectiontype SINGLE
@@ -128,6 +132,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "b1"
attribute[].datatype STRING
attribute[].collectiontype SINGLE
@@ -154,6 +159,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "b2"
attribute[].datatype STRING
attribute[].collectiontype SINGLE
@@ -180,6 +186,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "b3"
attribute[].datatype STRING
attribute[].collectiontype SINGLE
@@ -206,6 +213,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "b4"
attribute[].datatype INT32
attribute[].collectiontype SINGLE
@@ -232,6 +240,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "b5"
attribute[].datatype INT32
attribute[].collectiontype SINGLE
@@ -258,6 +267,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "b6"
attribute[].datatype INT64
attribute[].collectiontype ARRAY
@@ -284,6 +294,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "b7"
attribute[].datatype DOUBLE
attribute[].collectiontype WEIGHTEDSET
@@ -310,6 +321,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "a9"
attribute[].datatype INT32
attribute[].collectiontype SINGLE
@@ -336,6 +348,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "a10"
attribute[].datatype INT32
attribute[].collectiontype ARRAY
@@ -362,6 +375,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "a11"
attribute[].datatype INT32
attribute[].collectiontype SINGLE
@@ -388,6 +402,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "a12"
attribute[].datatype INT32
attribute[].collectiontype SINGLE
@@ -414,6 +429,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "a7_arr"
attribute[].datatype STRING
attribute[].collectiontype ARRAY
@@ -440,6 +456,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "a8_arr"
attribute[].datatype STRING
attribute[].collectiontype ARRAY
@@ -466,3 +483,4 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
diff --git a/config-model/src/test/derived/complex/attributes.cfg b/config-model/src/test/derived/complex/attributes.cfg
index 337b736471d..f1449cf52be 100644
--- a/config-model/src/test/derived/complex/attributes.cfg
+++ b/config-model/src/test/derived/complex/attributes.cfg
@@ -24,6 +24,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "fleeting"
attribute[].datatype FLOAT
attribute[].collectiontype ARRAY
@@ -50,6 +51,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "fleeting2"
attribute[].datatype FLOAT
attribute[].collectiontype SINGLE
@@ -76,6 +78,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "foundat"
attribute[].datatype INT64
attribute[].collectiontype SINGLE
@@ -102,6 +105,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "collapseby"
attribute[].datatype INT32
attribute[].collectiontype SINGLE
@@ -128,6 +132,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "ts"
attribute[].datatype INT64
attribute[].collectiontype SINGLE
@@ -154,6 +159,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "combineda"
attribute[].datatype INT32
attribute[].collectiontype SINGLE
@@ -180,6 +186,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "year_arr"
attribute[].datatype INT32
attribute[].collectiontype ARRAY
@@ -206,6 +213,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "year_sub"
attribute[].datatype INT32
attribute[].collectiontype SINGLE
@@ -232,3 +240,4 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
diff --git a/config-model/src/test/derived/hnsw_index/attributes.cfg b/config-model/src/test/derived/hnsw_index/attributes.cfg
index 087a116f4cd..9cea76174c7 100644
--- a/config-model/src/test/derived/hnsw_index/attributes.cfg
+++ b/config-model/src/test/derived/hnsw_index/attributes.cfg
@@ -24,6 +24,7 @@ attribute[].index.hnsw.enabled true
attribute[].index.hnsw.maxlinkspernode 32
attribute[].index.hnsw.distancemetric ANGULAR
attribute[].index.hnsw.neighborstoexploreatinsert 300
+attribute[].index.hnsw.multithreadedindexing true
attribute[].name "t2"
attribute[].datatype TENSOR
attribute[].collectiontype SINGLE
@@ -50,3 +51,4 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
diff --git a/config-model/src/test/derived/hnsw_index/test.sd b/config-model/src/test/derived/hnsw_index/test.sd
index 82291be9747..373624c9e7b 100644
--- a/config-model/src/test/derived/hnsw_index/test.sd
+++ b/config-model/src/test/derived/hnsw_index/test.sd
@@ -9,6 +9,7 @@ search test {
hnsw {
max-links-per-node: 32
neighbors-to-explore-at-insert: 300
+ multi-threaded-indexing
}
}
}
diff --git a/config-model/src/test/derived/imported_position_field/attributes.cfg b/config-model/src/test/derived/imported_position_field/attributes.cfg
index 685f708768a..75184c66789 100644
--- a/config-model/src/test/derived/imported_position_field/attributes.cfg
+++ b/config-model/src/test/derived/imported_position_field/attributes.cfg
@@ -24,6 +24,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "my_pos_zcurve"
attribute[].datatype INT64
attribute[].collectiontype SINGLE
@@ -50,3 +51,4 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
diff --git a/config-model/src/test/derived/imported_struct_fields/attributes.cfg b/config-model/src/test/derived/imported_struct_fields/attributes.cfg
index e8b7a7b6235..6256f98d05f 100644
--- a/config-model/src/test/derived/imported_struct_fields/attributes.cfg
+++ b/config-model/src/test/derived/imported_struct_fields/attributes.cfg
@@ -24,6 +24,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "my_elem_array.name"
attribute[].datatype STRING
attribute[].collectiontype SINGLE
@@ -50,6 +51,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "my_elem_array.weight"
attribute[].datatype INT32
attribute[].collectiontype SINGLE
@@ -76,6 +78,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "my_elem_map.key"
attribute[].datatype STRING
attribute[].collectiontype SINGLE
@@ -102,6 +105,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "my_elem_map.value.name"
attribute[].datatype STRING
attribute[].collectiontype SINGLE
@@ -128,6 +132,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "my_elem_map.value.weight"
attribute[].datatype INT32
attribute[].collectiontype SINGLE
@@ -154,6 +159,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "my_str_int_map.key"
attribute[].datatype STRING
attribute[].collectiontype SINGLE
@@ -180,6 +186,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "my_str_int_map.value"
attribute[].datatype INT32
attribute[].collectiontype SINGLE
@@ -206,3 +213,4 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
diff --git a/config-model/src/test/derived/importedfields/attributes.cfg b/config-model/src/test/derived/importedfields/attributes.cfg
index 6f3514102b4..87a841a95e0 100644
--- a/config-model/src/test/derived/importedfields/attributes.cfg
+++ b/config-model/src/test/derived/importedfields/attributes.cfg
@@ -24,6 +24,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "b_ref"
attribute[].datatype REFERENCE
attribute[].collectiontype SINGLE
@@ -50,6 +51,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "b_ref_with_summary"
attribute[].datatype REFERENCE
attribute[].collectiontype SINGLE
@@ -76,6 +78,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "my_int_field"
attribute[].datatype INT32
attribute[].collectiontype SINGLE
@@ -102,6 +105,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "my_string_field"
attribute[].datatype STRING
attribute[].collectiontype SINGLE
@@ -128,6 +132,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "my_int_array_field"
attribute[].datatype INT32
attribute[].collectiontype ARRAY
@@ -154,6 +159,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "my_int_wset_field"
attribute[].datatype INT32
attribute[].collectiontype WEIGHTEDSET
@@ -180,6 +186,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "my_ancient_int_field"
attribute[].datatype INT32
attribute[].collectiontype SINGLE
@@ -206,3 +213,4 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
diff --git a/config-model/src/test/derived/inheritance/attributes.cfg b/config-model/src/test/derived/inheritance/attributes.cfg
index 541092622ff..f5ced387e8e 100644
--- a/config-model/src/test/derived/inheritance/attributes.cfg
+++ b/config-model/src/test/derived/inheritance/attributes.cfg
@@ -24,6 +24,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "overridden"
attribute[].datatype INT32
attribute[].collectiontype SINGLE
@@ -50,6 +51,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "onlymother"
attribute[].datatype STRING
attribute[].collectiontype SINGLE
@@ -76,3 +78,4 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
diff --git a/config-model/src/test/derived/inheritfromparent/attributes.cfg b/config-model/src/test/derived/inheritfromparent/attributes.cfg
index dda86f765be..26b0f77417a 100644
--- a/config-model/src/test/derived/inheritfromparent/attributes.cfg
+++ b/config-model/src/test/derived/inheritfromparent/attributes.cfg
@@ -24,3 +24,4 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
diff --git a/config-model/src/test/derived/map_attribute/attributes.cfg b/config-model/src/test/derived/map_attribute/attributes.cfg
index 702e065d15a..7f224ff0c6a 100644
--- a/config-model/src/test/derived/map_attribute/attributes.cfg
+++ b/config-model/src/test/derived/map_attribute/attributes.cfg
@@ -24,6 +24,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "str_map.value"
attribute[].datatype STRING
attribute[].collectiontype ARRAY
@@ -50,6 +51,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "int_map.key"
attribute[].datatype INT32
attribute[].collectiontype ARRAY
@@ -76,3 +78,4 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
diff --git a/config-model/src/test/derived/map_of_struct_attribute/attributes.cfg b/config-model/src/test/derived/map_of_struct_attribute/attributes.cfg
index 3eca0d5bbf8..f08fd4e8907 100644
--- a/config-model/src/test/derived/map_of_struct_attribute/attributes.cfg
+++ b/config-model/src/test/derived/map_of_struct_attribute/attributes.cfg
@@ -24,6 +24,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "str_elem_map.value.name"
attribute[].datatype STRING
attribute[].collectiontype ARRAY
@@ -50,6 +51,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "str_elem_map.value.weight"
attribute[].datatype INT32
attribute[].collectiontype ARRAY
@@ -76,6 +78,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "int_elem_map.key"
attribute[].datatype INT32
attribute[].collectiontype ARRAY
@@ -102,6 +105,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "int_elem_map.value.name"
attribute[].datatype STRING
attribute[].collectiontype ARRAY
@@ -128,3 +132,4 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
diff --git a/config-model/src/test/derived/music/attributes.cfg b/config-model/src/test/derived/music/attributes.cfg
index f75b8e06b80..d33313c30eb 100644
--- a/config-model/src/test/derived/music/attributes.cfg
+++ b/config-model/src/test/derived/music/attributes.cfg
@@ -24,6 +24,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "pto"
attribute[].datatype INT32
attribute[].collectiontype SINGLE
@@ -50,6 +51,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "mid"
attribute[].datatype INT32
attribute[].collectiontype SINGLE
@@ -76,6 +78,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "weight"
attribute[].datatype FLOAT
attribute[].collectiontype SINGLE
@@ -102,6 +105,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "bgnpfrom"
attribute[].datatype FLOAT
attribute[].collectiontype SINGLE
@@ -128,6 +132,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "newestedition"
attribute[].datatype INT32
attribute[].collectiontype SINGLE
@@ -154,6 +159,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "year"
attribute[].datatype INT32
attribute[].collectiontype SINGLE
@@ -180,6 +186,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "did"
attribute[].datatype INT32
attribute[].collectiontype SINGLE
@@ -206,6 +213,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "cbid"
attribute[].datatype INT32
attribute[].collectiontype SINGLE
@@ -232,6 +240,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "hiphopvalue_arr"
attribute[].datatype STRING
attribute[].collectiontype ARRAY
@@ -258,6 +267,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "metalvalue_arr"
attribute[].datatype STRING
attribute[].collectiontype ARRAY
@@ -284,3 +294,4 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
diff --git a/config-model/src/test/derived/newrank/attributes.cfg b/config-model/src/test/derived/newrank/attributes.cfg
index 303ea35223a..ae3a33e49c3 100644
--- a/config-model/src/test/derived/newrank/attributes.cfg
+++ b/config-model/src/test/derived/newrank/attributes.cfg
@@ -24,6 +24,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "pto"
attribute[].datatype INT32
attribute[].collectiontype SINGLE
@@ -50,6 +51,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "mid"
attribute[].datatype INT32
attribute[].collectiontype SINGLE
@@ -76,6 +78,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "weight"
attribute[].datatype FLOAT
attribute[].collectiontype SINGLE
@@ -102,6 +105,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "bgnpfrom"
attribute[].datatype FLOAT
attribute[].collectiontype SINGLE
@@ -128,6 +132,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "newestedition"
attribute[].datatype INT32
attribute[].collectiontype SINGLE
@@ -154,6 +159,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "year"
attribute[].datatype INT32
attribute[].collectiontype SINGLE
@@ -180,6 +186,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "did"
attribute[].datatype INT32
attribute[].collectiontype SINGLE
@@ -206,6 +213,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "scorekey"
attribute[].datatype INT32
attribute[].collectiontype SINGLE
@@ -232,6 +240,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "cbid"
attribute[].datatype INT32
attribute[].collectiontype SINGLE
@@ -258,3 +267,4 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
diff --git a/config-model/src/test/derived/predicate_attribute/attributes.cfg b/config-model/src/test/derived/predicate_attribute/attributes.cfg
index d095b68752a..b70804ed36d 100644
--- a/config-model/src/test/derived/predicate_attribute/attributes.cfg
+++ b/config-model/src/test/derived/predicate_attribute/attributes.cfg
@@ -24,3 +24,4 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
diff --git a/config-model/src/test/derived/prefixexactattribute/attributes.cfg b/config-model/src/test/derived/prefixexactattribute/attributes.cfg
index 5cae6b784ff..5e9930317cd 100644
--- a/config-model/src/test/derived/prefixexactattribute/attributes.cfg
+++ b/config-model/src/test/derived/prefixexactattribute/attributes.cfg
@@ -24,6 +24,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "attributefield2"
attribute[].datatype STRING
attribute[].collectiontype SINGLE
@@ -50,3 +51,4 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
diff --git a/config-model/src/test/derived/reference_fields/attributes.cfg b/config-model/src/test/derived/reference_fields/attributes.cfg
index ec3ca030373..6bc8f93a4d4 100644
--- a/config-model/src/test/derived/reference_fields/attributes.cfg
+++ b/config-model/src/test/derived/reference_fields/attributes.cfg
@@ -24,6 +24,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "other_ref"
attribute[].datatype REFERENCE
attribute[].collectiontype SINGLE
@@ -50,6 +51,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "yet_another_ref"
attribute[].datatype REFERENCE
attribute[].collectiontype SINGLE
@@ -76,3 +78,4 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
diff --git a/config-model/src/test/derived/sorting/attributes.cfg b/config-model/src/test/derived/sorting/attributes.cfg
index 6e50bd625ee..a957e1ae4dd 100644
--- a/config-model/src/test/derived/sorting/attributes.cfg
+++ b/config-model/src/test/derived/sorting/attributes.cfg
@@ -24,6 +24,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "syntaxcheck2"
attribute[].datatype STRING
attribute[].collectiontype SINGLE
@@ -50,6 +51,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "infieldonly"
attribute[].datatype STRING
attribute[].collectiontype SINGLE
@@ -76,3 +78,4 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
diff --git a/config-model/src/test/derived/tensor/attributes.cfg b/config-model/src/test/derived/tensor/attributes.cfg
index 6ed960728c2..38d25a0faf0 100644
--- a/config-model/src/test/derived/tensor/attributes.cfg
+++ b/config-model/src/test/derived/tensor/attributes.cfg
@@ -24,6 +24,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "f3"
attribute[].datatype TENSOR
attribute[].collectiontype SINGLE
@@ -50,6 +51,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "f4"
attribute[].datatype TENSOR
attribute[].collectiontype SINGLE
@@ -76,6 +78,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "f5"
attribute[].datatype TENSOR
attribute[].collectiontype SINGLE
@@ -102,6 +105,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "f6"
attribute[].datatype FLOAT
attribute[].collectiontype SINGLE
@@ -128,3 +132,4 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
diff --git a/config-model/src/test/derived/types/attributes.cfg b/config-model/src/test/derived/types/attributes.cfg
index 8e37a1f1c63..536a2acba73 100644
--- a/config-model/src/test/derived/types/attributes.cfg
+++ b/config-model/src/test/derived/types/attributes.cfg
@@ -24,6 +24,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "along"
attribute[].datatype INT64
attribute[].collectiontype SINGLE
@@ -50,6 +51,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "abool"
attribute[].datatype BOOL
attribute[].collectiontype SINGLE
@@ -76,6 +78,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "ashortfloat"
attribute[].datatype FLOAT16
attribute[].collectiontype SINGLE
@@ -102,6 +105,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "arrayfield"
attribute[].datatype INT32
attribute[].collectiontype ARRAY
@@ -128,6 +132,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "setfield"
attribute[].datatype STRING
attribute[].collectiontype WEIGHTEDSET
@@ -154,6 +159,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "setfield2"
attribute[].datatype STRING
attribute[].collectiontype WEIGHTEDSET
@@ -180,6 +186,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "setfield3"
attribute[].datatype STRING
attribute[].collectiontype WEIGHTEDSET
@@ -206,6 +213,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "setfield4"
attribute[].datatype STRING
attribute[].collectiontype WEIGHTEDSET
@@ -232,6 +240,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "tagfield"
attribute[].datatype STRING
attribute[].collectiontype WEIGHTEDSET
@@ -258,6 +267,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "juletre"
attribute[].datatype INT64
attribute[].collectiontype SINGLE
@@ -284,6 +294,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "album1"
attribute[].datatype STRING
attribute[].collectiontype WEIGHTEDSET
@@ -310,6 +321,7 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
attribute[].name "other"
attribute[].datatype INT64
attribute[].collectiontype SINGLE
@@ -336,3 +348,4 @@ attribute[].index.hnsw.enabled false
attribute[].index.hnsw.maxlinkspernode 16
attribute[].index.hnsw.distancemetric EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert 200
+attribute[].index.hnsw.multithreadedindexing false
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/document/HnswIndexParamsTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/document/HnswIndexParamsTestCase.java
index e3dcc925e5e..44379d25012 100644
--- a/config-model/src/test/java/com/yahoo/searchdefinition/document/HnswIndexParamsTestCase.java
+++ b/config-model/src/test/java/com/yahoo/searchdefinition/document/HnswIndexParamsTestCase.java
@@ -17,29 +17,37 @@ public class HnswIndexParamsTestCase {
var empty = new HnswIndexParams();
var builder = new HnswIndexParams.Builder();
builder.setMaxLinksPerNode(7);
+ builder.setMultiThreadedIndexing(false);
var one = builder.build();
builder.setNeighborsToExploreAtInsert(42);
var three = builder.build();
builder.setMaxLinksPerNode(17);
builder.setNeighborsToExploreAtInsert(500);
+ builder.setMultiThreadedIndexing(true);
var four = builder.build();
assertThat(empty.maxLinksPerNode(), is(16));
assertThat(empty.neighborsToExploreAtInsert(), is(200));
+ assertThat(empty.multiThreadedIndexing(), is(false));
assertThat(one.maxLinksPerNode(), is(7));
+ assertThat(one.multiThreadedIndexing(), is(false));
assertThat(three.neighborsToExploreAtInsert(), is(42));
assertThat(four.maxLinksPerNode(), is(17));
assertThat(four.neighborsToExploreAtInsert(), is(500));
+ assertThat(four.multiThreadedIndexing(), is(true));
var five = four.overrideFrom(Optional.of(empty));
assertThat(five.maxLinksPerNode(), is(17));
assertThat(five.neighborsToExploreAtInsert(), is(500));
+ assertThat(five.multiThreadedIndexing(), is(true));
var six = four.overrideFrom(Optional.of(one));
assertThat(six.maxLinksPerNode(), is(7));
assertThat(six.neighborsToExploreAtInsert(), is(500));
+ // This is explicitly set to false in 'one'
+ assertThat(six.multiThreadedIndexing(), is(false));
}
}
diff --git a/configdefinitions/src/vespa/attributes.def b/configdefinitions/src/vespa/attributes.def
index 3602c2b0fd7..a091fbc573c 100644
--- a/configdefinitions/src/vespa/attributes.def
+++ b/configdefinitions/src/vespa/attributes.def
@@ -41,3 +41,5 @@ attribute[].index.hnsw.maxlinkspernode int default=16
# Deprecated: Remove on Vespa 8 or before when possible.
attribute[].index.hnsw.distancemetric enum { EUCLIDEAN, ANGULAR, GEODEGREES } default=EUCLIDEAN
attribute[].index.hnsw.neighborstoexploreatinsert int default=200
+# Whether multi-threaded indexing is enabled for this hnsw index.
+attribute[].index.hnsw.multithreadedindexing bool default=false