diff options
author | Jon Bratseth <bratseth@oath.com> | 2021-04-19 20:30:44 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-04-19 20:30:44 +0200 |
commit | 2aa475a737bd6cec80d4ecd61023bd01182ce9de (patch) | |
tree | 2cc2cca38c1ac993dc3bbe6da6d8d2d6153a80b7 /config-model | |
parent | c46e80e5c45b0979d44f17d843cc9fae9ac36833 (diff) | |
parent | b22f9ad0bbfc8883c94d93fcd042ba481a26beb2 (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')
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()); |