summaryrefslogtreecommitdiffstats
path: root/config-model
diff options
context:
space:
mode:
authorJon Bratseth <bratseth@oath.com>2021-04-19 20:30:44 +0200
committerGitHub <noreply@github.com>2021-04-19 20:30:44 +0200
commit2aa475a737bd6cec80d4ecd61023bd01182ce9de (patch)
tree2cc2cca38c1ac993dc3bbe6da6d8d2d6153a80b7 /config-model
parentc46e80e5c45b0979d44f17d843cc9fae9ac36833 (diff)
parentb22f9ad0bbfc8883c94d93fcd042ba481a26beb2 (diff)
Merge pull request #17490 from vespa-engine/geirst/hnsw-index-parameters-validation
A tensor field that specifies hnsw index parameters must also specify…
Diffstat (limited to 'config-model')
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/TensorFieldProcessor.java8
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/processing/TensorFieldTestCase.java19
2 files changed, 27 insertions, 0 deletions
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/TensorFieldProcessor.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/TensorFieldProcessor.java
index dcf238c71c2..397e1c3deab 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/TensorFieldProcessor.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/TensorFieldProcessor.java
@@ -29,6 +29,7 @@ public class TensorFieldProcessor extends Processor {
if (validate) {
validateIndexingScripsForTensorField(field);
validateAttributeSettingForTensorField(field);
+ validateHnswIndexParametersRequiresIndexing(field);
}
processIndexSettingsForTensorField(field, validate);
}
@@ -84,6 +85,13 @@ public class TensorFieldProcessor extends Processor {
}
}
+ private void validateHnswIndexParametersRequiresIndexing(SDField field) {
+ var index = field.getIndex(field.getName());
+ if (index != null && index.getHnswIndexParams().isPresent() && !field.doesIndexing()) {
+ fail(search, field, "A tensor that specifies hnsw index parameters must also specify 'index' in 'indexing'");
+ }
+ }
+
private void processIndexSettingsForTensorField(SDField field, boolean validate) {
if (!field.doesIndexing()) {
return;
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/processing/TensorFieldTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/processing/TensorFieldTestCase.java
index 7241b7ca5e7..84ddf4f2d51 100644
--- a/config-model/src/test/java/com/yahoo/searchdefinition/processing/TensorFieldTestCase.java
+++ b/config-model/src/test/java/com/yahoo/searchdefinition/processing/TensorFieldTestCase.java
@@ -103,6 +103,25 @@ public class TensorFieldTestCase {
}
@Test
+ public void tensor_with_hnsw_index_parameters_must_be_an_index() throws ParseException {
+ try {
+ createFromString(getSd(joinLines(
+ "field t1 type tensor(x[64]) {",
+ " indexing: attribute ",
+ " index {",
+ " hnsw { max-links-per-node: 32 }",
+ " }",
+ "}")));
+ fail("Expected exception");
+ }
+ catch (IllegalArgumentException e) {
+ assertEquals("For search 'test', field 't1': " +
+ "A tensor that specifies hnsw index parameters must also specify 'index' in 'indexing'",
+ e.getMessage());
+ }
+ }
+
+ @Test
public void tensors_with_at_least_one_mapped_dimension_can_be_direct() throws ParseException {
assertTrue(getAttributeFromSd(
"field t1 type tensor(x{}) { indexing: attribute \n attribute: fast-search }", "t1").isFastSearch());