aboutsummaryrefslogtreecommitdiffstats
path: root/container-search
diff options
context:
space:
mode:
authorArne Juul <arnej@vespa.ai>2024-03-06 15:01:07 +0000
committerArne Juul <arnej@vespa.ai>2024-03-06 15:01:07 +0000
commit075bcbeb548319f564589e3a89f7779894f2c4f3 (patch)
tree2dbc4df04955e59585fff15c1ef12f005976df84 /container-search
parent296c4a2be1e8a0d521c036eb30a709364ceacc57 (diff)
give better error message about bad query tensor type
Diffstat (limited to 'container-search')
-rw-r--r--container-search/src/main/java/com/yahoo/search/searchers/ValidateNearestNeighborSearcher.java12
-rw-r--r--container-search/src/test/java/com/yahoo/search/searchers/ValidateNearestNeighborTestCase.java10
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