diff options
author | Geir Storli <geirst@yahooinc.com> | 2023-01-27 16:13:07 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-01-27 16:13:07 +0100 |
commit | 23d9dbf2469063b5af3c28b247994272eb770fc8 (patch) | |
tree | 56aab8071c8434fe0f5d4d9fc183625742eebcac | |
parent | 414aaf3e1e478deadf199488887dc0d9da0881ab (diff) | |
parent | 5d278f289111a55400778cf4ebf085bf8003e9c4 (diff) |
Merge pull request #25771 from vespa-engine/bratseth/alias-in-nn
Dealias nn fields
6 files changed, 23 insertions, 16 deletions
diff --git a/container-search/src/main/java/com/yahoo/prelude/IndexFacts.java b/container-search/src/main/java/com/yahoo/prelude/IndexFacts.java index 90194f3ba6a..92ce6abb319 100644 --- a/container-search/src/main/java/com/yahoo/prelude/IndexFacts.java +++ b/container-search/src/main/java/com/yahoo/prelude/IndexFacts.java @@ -15,6 +15,9 @@ import java.util.TreeSet; import static com.yahoo.text.Lowercase.toLowerCase; /** + * NOTE: We are in the process of moving the functionality of this over to {@link com.yahoo.search.schema.SchemaInfo} - + * see if you can use that before adding usage of this. + * * A central repository for information about indices. Standard usage is * * <pre><code> @@ -24,9 +27,7 @@ import static com.yahoo.text.Lowercase.toLowerCase; * * @author Steinar Knutsen */ -// TODO: We should replace this with a better representation of search definitions -// which is immutable, models clusters and search definitions inside clusters properly, -// and uses better names. -bratseth +// TODO: Complete migration to SchemaInfo public class IndexFacts { private Map<String, List<String>> clusterByDocument; diff --git a/container-search/src/main/java/com/yahoo/search/query/SelectParser.java b/container-search/src/main/java/com/yahoo/search/query/SelectParser.java index e8ea6f88fce..0c65f4bf8dc 100644 --- a/container-search/src/main/java/com/yahoo/search/query/SelectParser.java +++ b/container-search/src/main/java/com/yahoo/search/query/SelectParser.java @@ -475,7 +475,7 @@ public class SelectParser implements Parser { Preconditions.checkArgument(children.size() == 2, "Expected 2 arguments, got %s.", children.size()); String field = children.get(0).asString(); String property = children.get(1).asString(); - NearestNeighborItem item = new NearestNeighborItem(field, property); + NearestNeighborItem item = new NearestNeighborItem(indexFactsSession.getCanonicName(field), property); Inspector annotations = getAnnotations(value); if (annotations != null){ annotations.traverse((ObjectTraverser) (annotation_name, annotation_value) -> { diff --git a/container-search/src/main/java/com/yahoo/search/yql/YqlParser.java b/container-search/src/main/java/com/yahoo/search/yql/YqlParser.java index 76ceb60b3d5..639e5b592c3 100644 --- a/container-search/src/main/java/com/yahoo/search/yql/YqlParser.java +++ b/container-search/src/main/java/com/yahoo/search/yql/YqlParser.java @@ -448,7 +448,7 @@ public class YqlParser implements Parser { Preconditions.checkArgument(args.size() == 2, "Expected 2 arguments, got %s.", args.size()); String field = fetchFieldName(args.get(0)); String property = fetchLiteral(args.get(1)); - NearestNeighborItem item = new NearestNeighborItem(field, property); + NearestNeighborItem item = new NearestNeighborItem(indexFactsSession.getCanonicName(field), property); Integer targetNumHits = getAnnotation(ast, TARGET_HITS, Integer.class, null, "desired minimum hits to produce"); if (targetNumHits == null) { 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 9a7e3915d19..e85280914d8 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 @@ -63,12 +63,12 @@ public class ValidateNearestNeighborTestCase { )); } - private static TensorType tt_dense_dvector_42 = TensorType.fromSpec("tensor(x[42])"); - private static TensorType tt_dense_dvector_3 = TensorType.fromSpec("tensor(x[3])"); - private static TensorType tt_dense_dvector_2 = TensorType.fromSpec("tensor(x[2])"); - private static TensorType tt_dense_fvector_3 = TensorType.fromSpec("tensor<float>(x[3])"); - private static TensorType tt_dense_matrix_xy = TensorType.fromSpec("tensor(x[3],y[1])"); - private static TensorType tt_sparse_vector_x = TensorType.fromSpec("tensor(x{})"); + private static final TensorType tt_dense_dvector_42 = TensorType.fromSpec("tensor(x[42])"); + private static final TensorType tt_dense_dvector_3 = TensorType.fromSpec("tensor(x[3])"); + private static final TensorType tt_dense_dvector_2 = TensorType.fromSpec("tensor(x[2])"); + private static final TensorType tt_dense_fvector_3 = TensorType.fromSpec("tensor<float>(x[3])"); + private static final TensorType tt_dense_matrix_xy = TensorType.fromSpec("tensor(x[3],y[1])"); + private static final TensorType tt_sparse_vector_x = TensorType.fromSpec("tensor(x{})"); private Tensor makeTensor(TensorType tensorType) { return makeTensor(tensorType, 3); diff --git a/container-search/src/test/java/com/yahoo/search/yql/YqlParserTestCase.java b/container-search/src/test/java/com/yahoo/search/yql/YqlParserTestCase.java index c15c3b2c5ea..bc9448f39d8 100644 --- a/container-search/src/test/java/com/yahoo/search/yql/YqlParserTestCase.java +++ b/container-search/src/test/java/com/yahoo/search/yql/YqlParserTestCase.java @@ -15,6 +15,7 @@ import com.yahoo.prelude.query.FuzzyItem; import com.yahoo.prelude.query.IndexedItem; import com.yahoo.prelude.query.Item; import com.yahoo.prelude.query.MarkerWordItem; +import com.yahoo.prelude.query.NearestNeighborItem; import com.yahoo.prelude.query.PhraseItem; import com.yahoo.prelude.query.PhraseSegmentItem; import com.yahoo.prelude.query.PrefixItem; @@ -990,21 +991,27 @@ public class YqlParserTestCase { .name("music") .command(new Command.Builder().indexname("title").command("index")) .command(new Command.Builder().indexname("year").command("attribute")) + .command(new Command.Builder().indexname("embedding").command("attribute")) .alias(new Alias.Builder().alias("song").indexname("title")) - .alias(new Alias.Builder().alias("from").indexname("year")))); + .alias(new Alias.Builder().alias("from").indexname("year")) + .alias(new Alias.Builder().alias("vector").indexname("embedding")))); IndexModel model = new IndexModel(modelConfig, (QrSearchersConfig) null); IndexFacts indexFacts = new IndexFacts(model); ParserEnvironment parserEnvironment = new ParserEnvironment().setIndexFacts(indexFacts); YqlParser configuredParser = new YqlParser(parserEnvironment); - QueryTree x = configuredParser.parse(new Parsable() - .setQuery("select * from sources * where title contains \"a\" and song contains \"b\" order by \"from\"")); - List<IndexedItem> terms = QueryTree.getPositiveTerms(x); + QueryTree query = configuredParser.parse(new Parsable() + .setQuery("select * from sources * where title contains \"a\" and song contains \"b\"" + + "and nearestNeighbor(vector, queryVector)" + + "order by \"from\"")); + List<IndexedItem> terms = QueryTree.getPositiveTerms(query); assertEquals(2, terms.size()); for (IndexedItem term : terms) assertEquals("title", term.getIndexName()); assertEquals(1, configuredParser.getSorting().fieldOrders().size()); assertEquals("year", configuredParser.getSorting().fieldOrders().get(0).getFieldName()); + var nnItem = (NearestNeighborItem)((AndItem)query.getRoot()).getItem(2); + assertEquals("embedding", nnItem.getIndexName()); } @Test diff --git a/container-search/src/test/java/com/yahoo/select/SelectTestCase.java b/container-search/src/test/java/com/yahoo/select/SelectTestCase.java index 887a1a3a033..10d3a5aeabe 100644 --- a/container-search/src/test/java/com/yahoo/select/SelectTestCase.java +++ b/container-search/src/test/java/com/yahoo/select/SelectTestCase.java @@ -546,7 +546,6 @@ public class SelectTestCase { } @Test - @SuppressWarnings("deprecation") void testWeakAnd() { assertParse("{ \"weakAnd\": [{ \"contains\": [\"a\", \"A\"] }, { \"contains\": [\"b\", \"B\"] } ] }", "WEAKAND(100) a:A b:B"); |