diff options
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( |