summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLester Solbakken <lesters@users.noreply.github.com>2024-03-31 10:33:36 +0200
committerGitHub <noreply@github.com>2024-03-31 10:33:36 +0200
commit0f69f9df3c00ca728169d240481cc7b88b762a80 (patch)
tree152f5bc4bc6f8de803b5b7fad28fd60505e81680
parent5279cf0b4ab52fb00078f7ba9d3155365691dcee (diff)
parent0f34d33fa2a0f4f0772868936e7f8c60e2074040 (diff)
Merge pull request #30754 from vespa-engine/bratseth/improve-embedder-errors
Improve embedder error messages
-rw-r--r--config-model/src/main/java/com/yahoo/schema/document/SDField.java4
-rw-r--r--container-search/src/main/java/com/yahoo/prelude/querytransform/StemmingSearcher.java3
-rw-r--r--container-search/src/main/java/com/yahoo/search/schema/internal/TensorConverter.java18
-rw-r--r--container-search/src/test/java/com/yahoo/search/query/RankProfileInputTest.java7
-rw-r--r--container-search/src/test/java/com/yahoo/search/query/profile/types/test/QueryProfileTypeTestCase.java9
5 files changed, 24 insertions, 17 deletions
diff --git a/config-model/src/main/java/com/yahoo/schema/document/SDField.java b/config-model/src/main/java/com/yahoo/schema/document/SDField.java
index 5cc51f9fedc..538cb56d210 100644
--- a/config-model/src/main/java/com/yahoo/schema/document/SDField.java
+++ b/config-model/src/main/java/com/yahoo/schema/document/SDField.java
@@ -636,7 +636,7 @@ public class SDField extends Field implements TypedKey, ImmutableSDField {
/**
* Returns the stemming setting of this field.
- * Default is determined by the owning search definition.
+ * Default is determined by the owning schema.
*
* @return the stemming setting of this, or null, to use the default
*/
@@ -644,7 +644,7 @@ public class SDField extends Field implements TypedKey, ImmutableSDField {
public Stemming getStemming() { return stemming; }
/**
- * Whether this field should be stemmed in this search definition
+ * Whether this field should be stemmed in this schema
*/
@Override
public Stemming getStemming(Schema schema) {
diff --git a/container-search/src/main/java/com/yahoo/prelude/querytransform/StemmingSearcher.java b/container-search/src/main/java/com/yahoo/prelude/querytransform/StemmingSearcher.java
index e8350831381..f27e9bbc281 100644
--- a/container-search/src/main/java/com/yahoo/prelude/querytransform/StemmingSearcher.java
+++ b/container-search/src/main/java/com/yahoo/prelude/querytransform/StemmingSearcher.java
@@ -383,8 +383,7 @@ public class StemmingSearcher extends Searcher {
}
private int getWeight(Item block) {
- if (block instanceof AndSegmentItem
- && ((AndSegmentItem) block).getItemCount() > 0) {
+ if (block instanceof AndSegmentItem && ((AndSegmentItem) block).getItemCount() > 0) {
return ((AndSegmentItem) block).getItem(0).getWeight();
} else {
return block.getWeight();
diff --git a/container-search/src/main/java/com/yahoo/search/schema/internal/TensorConverter.java b/container-search/src/main/java/com/yahoo/search/schema/internal/TensorConverter.java
index 4f1fa44b982..4485e538e13 100644
--- a/container-search/src/main/java/com/yahoo/search/schema/internal/TensorConverter.java
+++ b/container-search/src/main/java/com/yahoo/search/schema/internal/TensorConverter.java
@@ -70,10 +70,13 @@ public class TensorConverter {
embedder = requireEmbedder(embedderId);
argument = matcher.group(2);
} else if (embedders.isEmpty()) {
- throw new IllegalStateException("No embedders provided"); // should never happen
+ throw new IllegalArgumentException("No embedders provided"); // should never happen
} else if (embedders.size() > 1) {
- throw new IllegalArgumentException("Multiple embedders are provided but no embedder id is given. " +
- "Valid embedders are " + validEmbedders(embedders));
+ String usage = "Usage: embed(embedder-id, 'text'). " + embedderIds(embedders);
+ if (! argument.contains("\"") && ! argument.contains("'"))
+ throw new IllegalArgumentException("Multiple embedders are provided but the string to embed is not quoted. " + usage);
+ else
+ throw new IllegalArgumentException("Multiple embedders are provided but no embedder id is given. " + usage);
} else {
var entry = embedders.entrySet().stream().findFirst().get();
embedderId = entry.getKey();
@@ -84,8 +87,7 @@ public class TensorConverter {
private Embedder requireEmbedder(String embedderId) {
if ( ! embedders.containsKey(embedderId))
- throw new IllegalArgumentException("Can't find embedder '" + embedderId + "'. " +
- "Valid embedders are " + validEmbedders(embedders));
+ throw new IllegalArgumentException("Can't find embedder '" + embedderId + "'. " + embedderIds(embedders));
return embedders.get(embedderId);
}
@@ -108,11 +110,11 @@ public class TensorConverter {
return referencedValue.toString();
}
- private static String validEmbedders(Map<String, Embedder> embedders) {
+ private static String embedderIds(Map<String, Embedder> embedders) {
List<String> embedderIds = new ArrayList<>();
- embedders.forEach((key, value) -> embedderIds.add(key));
+ embedders.forEach((key, value) -> embedderIds.add("'" + key + "'"));
embedderIds.sort(null);
- return String.join(",", embedderIds);
+ return "Available embedder ids are " + String.join(", ", embedderIds) + ".";
}
}
diff --git a/container-search/src/test/java/com/yahoo/search/query/RankProfileInputTest.java b/container-search/src/test/java/com/yahoo/search/query/RankProfileInputTest.java
index 3cdfc95ea0e..f66d5395a02 100644
--- a/container-search/src/test/java/com/yahoo/search/query/RankProfileInputTest.java
+++ b/container-search/src/test/java/com/yahoo/search/query/RankProfileInputTest.java
@@ -161,7 +161,7 @@ public class RankProfileInputTest {
assertEmbedQuery("embed(emb1, '" + text + "')", embedding1, embedders);
assertEmbedQuery("embed(emb1, \"" + text + "\")", embedding1, embedders);
assertEmbedQueryFails("embed(emb2, \"" + text + "\")", embedding1, embedders,
- "Can't find embedder 'emb2'. Valid embedders are emb1");
+ "Can't find embedder 'emb2'. Available embedder ids are 'emb1'.");
embedders = Map.of(
"emb1", new MockEmbedder(text, Language.UNKNOWN, embedding1),
@@ -170,7 +170,10 @@ public class RankProfileInputTest {
assertEmbedQuery("embed(emb1, '" + text + "')", embedding1, embedders);
assertEmbedQuery("embed(emb2, '" + text + "')", embedding2, embedders);
assertEmbedQueryFails("embed(emb3, \"" + text + "\")", embedding1, embedders,
- "Can't find embedder 'emb3'. Valid embedders are emb1,emb2");
+ "Can't find embedder 'emb3'. Available embedder ids are 'emb1', 'emb2'.");
+ assertEmbedQueryFails("embed(emb3, text)", embedding1, embedders,
+ "Multiple embedders are provided but the string to embed is not quoted. " +
+ "Usage: embed(embedder-id, 'text'). Available embedder ids are 'emb1', 'emb2'.");
// And with specified language
embedders = Map.of(
diff --git a/container-search/src/test/java/com/yahoo/search/query/profile/types/test/QueryProfileTypeTestCase.java b/container-search/src/test/java/com/yahoo/search/query/profile/types/test/QueryProfileTypeTestCase.java
index c08b2478f86..0ad04090ae6 100644
--- a/container-search/src/test/java/com/yahoo/search/query/profile/types/test/QueryProfileTypeTestCase.java
+++ b/container-search/src/test/java/com/yahoo/search/query/profile/types/test/QueryProfileTypeTestCase.java
@@ -30,7 +30,7 @@ import java.util.Map;
import static org.junit.jupiter.api.Assertions.*;
/**
- * tests query profiles with/and types
+ * Tests query profiles with/and types
*
* @author bratseth
*/
@@ -496,7 +496,7 @@ public class QueryProfileTypeTestCase {
assertEmbedQuery("embed(emb1, '" + text + "')", embedding1, embedders);
assertEmbedQuery("embed(emb1, \"" + text + "\")", embedding1, embedders);
assertEmbedQueryFails("embed(emb2, \"" + text + "\")", embedding1, embedders,
- "Can't find embedder 'emb2'. Valid embedders are emb1");
+ "Can't find embedder 'emb2'. Available embedder ids are 'emb1'.");
embedders = Map.of(
"emb1", new MockEmbedder(text, Language.UNKNOWN, embedding1),
@@ -504,8 +504,11 @@ public class QueryProfileTypeTestCase {
);
assertEmbedQuery("embed(emb1, '" + text + "')", embedding1, embedders);
assertEmbedQuery("embed(emb2, '" + text + "')", embedding2, embedders);
+ assertEmbedQueryFails("embed(emb2, text)", embedding1, embedders,
+ "Multiple embedders are provided but the string to embed is not quoted. " +
+ "Usage: embed(embedder-id, 'text'). Available embedder ids are 'emb1', 'emb2'.");
assertEmbedQueryFails("embed(emb3, \"" + text + "\")", embedding1, embedders,
- "Can't find embedder 'emb3'. Valid embedders are emb1,emb2");
+ "Can't find embedder 'emb3'. Available embedder ids are 'emb1', 'emb2'.");
// And with specified language
embedders = Map.of(