diff options
author | Arne Juul <arnej@vespa.ai> | 2024-03-06 15:01:07 +0000 |
---|---|---|
committer | Arne Juul <arnej@vespa.ai> | 2024-03-06 15:01:07 +0000 |
commit | 075bcbeb548319f564589e3a89f7779894f2c4f3 (patch) | |
tree | 2dbc4df04955e59585fff15c1ef12f005976df84 /container-search | |
parent | 296c4a2be1e8a0d521c036eb30a709364ceacc57 (diff) |
give better error message about bad query tensor type
Diffstat (limited to 'container-search')
2 files changed, 20 insertions, 2 deletions
diff --git a/container-search/src/main/java/com/yahoo/search/searchers/ValidateNearestNeighborSearcher.java b/container-search/src/main/java/com/yahoo/search/searchers/ValidateNearestNeighborSearcher.java index 05d187ab820..54c8055a2ce 100644 --- a/container-search/src/main/java/com/yahoo/search/searchers/ValidateNearestNeighborSearcher.java +++ b/container-search/src/main/java/com/yahoo/search/searchers/ValidateNearestNeighborSearcher.java @@ -94,6 +94,15 @@ public class ValidateNearestNeighborSearcher extends Searcher { return false; } + private static boolean badQueryTensorType(TensorType queryTensorType) { + var queryDimensions = queryTensorType.dimensions(); + if (queryDimensions.size() != 1) { + return true; + } + var dim = queryDimensions.get(0); + return ! dim.isIndexed(); + } + private static boolean isTensorTypeThatSupportsHnswIndex(TensorType tt) { List<TensorType.Dimension> dims = tt.dimensions(); if (dims.size() == 1) { @@ -117,6 +126,9 @@ public class ValidateNearestNeighborSearcher extends Searcher { if (queryTensor.isEmpty()) return item + " requires a tensor rank feature named '" + queryFeatureName + "' but this is not present"; + if (badQueryTensorType(queryTensor.get().type())) { + return item + " tensor " + queryFeatureName + " must have exactly 1, indexed dimension, but was: " + queryTensor.get().type(); + } if ( ! validAttributes.containsKey(item.getIndexName())) { return item + " field is not an attribute"; } diff --git a/container-search/src/test/java/com/yahoo/search/searchers/ValidateNearestNeighborTestCase.java b/container-search/src/test/java/com/yahoo/search/searchers/ValidateNearestNeighborTestCase.java index 7bbc1801204..24938397023 100644 --- a/container-search/src/test/java/com/yahoo/search/searchers/ValidateNearestNeighborTestCase.java +++ b/container-search/src/test/java/com/yahoo/search/searchers/ValidateNearestNeighborTestCase.java @@ -208,17 +208,23 @@ public class ValidateNearestNeighborTestCase { @Test void testSparseTensor() { String q = makeQuery("sparse", "qvector"); - Tensor t = makeTensor(tt_sparse_vector_x); + Tensor t = makeTensor(tt_dense_dvector_3); Result r = doSearch(searcher, q, t); assertErrMsg(desc("sparse", "qvector", 1, "field type tensor(x{}) is not supported by nearest neighbor searcher"), r); + t = makeTensor(tt_sparse_vector_x); + r = doSearch(searcher, q, t); + assertErrMsg(desc("sparse", "qvector", 1, "tensor query(qvector) must have exactly 1, indexed dimension, but was: tensor(x{})"), r); } @Test void testMatrix() { String q = makeQuery("matrix", "qvector"); - Tensor t = makeMatrix(tt_dense_matrix_xy); + Tensor t = makeTensor(tt_dense_dvector_3); Result r = doSearch(searcher, q, t); assertErrMsg(desc("matrix", "qvector", 1, "field type tensor(x[3],y[1]) is not supported by nearest neighbor searcher"), r); + t = makeMatrix(tt_dense_matrix_xy); + r = doSearch(searcher, q, t); + assertErrMsg(desc("matrix", "qvector", 1, "tensor query(qvector) must have exactly 1, indexed dimension, but was: tensor(x[3],y[1])"), r); } @Test |