summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGeir Storli <geirst@verizonmedia.com>2020-07-10 13:22:17 +0000
committerGeir Storli <geirst@verizonmedia.com>2020-07-10 13:22:17 +0000
commit9d811fc606ca5aa2a18a3e5ebb30313f15aff10a (patch)
tree057b4d7251c93e22ddcb51c3df4c5e5461fb4136
parent437d046dc3cb3bff64227008a054234fe44ff451 (diff)
Support matched-elements-only for array and wset fields in streaming search.
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/MatchedElementsOnlyResolver.java13
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/processing/MatchedElementsOnlyResolverTestCase.java4
-rw-r--r--streamingvisitors/src/vespa/searchvisitor/matching_elements_filler.cpp3
-rw-r--r--vsm/src/vespa/vsm/vsm/docsumconfig.cpp3
4 files changed, 15 insertions, 8 deletions
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/MatchedElementsOnlyResolver.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/MatchedElementsOnlyResolver.java
index d86ed265b77..77064038053 100644
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/MatchedElementsOnlyResolver.java
+++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/MatchedElementsOnlyResolver.java
@@ -48,11 +48,13 @@ public class MatchedElementsOnlyResolver extends Processor {
if (isComplexFieldWithOnlyStructFieldAttributes(sourceField)) {
field.setTransform(SummaryTransform.MATCHED_ATTRIBUTE_ELEMENTS_FILTER);
}
- } else if (isSupportedAttributeField(sourceField)) {
- field.setTransform(SummaryTransform.MATCHED_ATTRIBUTE_ELEMENTS_FILTER);
+ } else if (isSupportedMultiValueField(sourceField)) {
+ if (sourceField.doesAttributing()) {
+ field.setTransform(SummaryTransform.MATCHED_ATTRIBUTE_ELEMENTS_FILTER);
+ }
} else if (validate) {
fail(summary, field, "'matched-elements-only' is not supported for this field type. " +
- "Supported field types are: array attribute, weighted set attribute, " +
+ "Supported field types are: array of primitive, weighted set of primitive, " +
"array of simple struct, map of primitive type to simple struct, " +
"and map of primitive type to primitive type");
}
@@ -60,10 +62,9 @@ public class MatchedElementsOnlyResolver extends Processor {
// else case is handled in SummaryFieldsMustHaveValidSource
}
- private boolean isSupportedAttributeField(ImmutableSDField sourceField) {
+ private boolean isSupportedMultiValueField(ImmutableSDField sourceField) {
var type = sourceField.getDataType();
- return sourceField.doesAttributing() &&
- (isArrayOfPrimitiveType(type) || isWeightedsetOfPrimitiveType(type));
+ return (isArrayOfPrimitiveType(type) || isWeightedsetOfPrimitiveType(type));
}
private boolean isArrayOfPrimitiveType(DataType type) {
diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/processing/MatchedElementsOnlyResolverTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/processing/MatchedElementsOnlyResolverTestCase.java
index 0ef696df6cf..ab98706fd44 100644
--- a/config-model/src/test/java/com/yahoo/searchdefinition/processing/MatchedElementsOnlyResolverTestCase.java
+++ b/config-model/src/test/java/com/yahoo/searchdefinition/processing/MatchedElementsOnlyResolverTestCase.java
@@ -149,10 +149,10 @@ public class MatchedElementsOnlyResolverTestCase {
exceptionRule.expect(IllegalArgumentException.class);
exceptionRule.expectMessage("For search 'test', document summary 'default', summary field 'my_field': " +
"'matched-elements-only' is not supported for this field type. " +
- "Supported field types are: array attribute, weighted set attribute, " +
+ "Supported field types are: array of primitive, weighted set of primitive, " +
"array of simple struct, map of primitive type to simple struct, " +
"and map of primitive type to primitive type");
- buildSearch(joinLines("field my_field type array<string> {",
+ buildSearch(joinLines("field my_field type string {",
" indexing: summary",
" summary: matched-elements-only",
"}"));
diff --git a/streamingvisitors/src/vespa/searchvisitor/matching_elements_filler.cpp b/streamingvisitors/src/vespa/searchvisitor/matching_elements_filler.cpp
index fe717313ca4..d51bd57e942 100644
--- a/streamingvisitors/src/vespa/searchvisitor/matching_elements_filler.cpp
+++ b/streamingvisitors/src/vespa/searchvisitor/matching_elements_filler.cpp
@@ -83,6 +83,9 @@ Matcher::select_query_nodes(const MatchingElementsFields& fields, const QueryNod
if (fields.has_struct_field(query_term->getIndex())) {
_sub_field_terms.emplace_back(fields.get_enclosing_field(query_term->getIndex()), query_term);
}
+ if (fields.has_field(query_term->getIndex())) {
+ _sub_field_terms.emplace_back(query_term->getIndex(), query_term);
+ }
} else if (auto and_not = as<AndNotQueryNode>(query_node)) {
select_query_nodes(fields, *(*and_not)[0]);
} else if (auto intermediate = as<QueryConnector>(query_node)) {
diff --git a/vsm/src/vespa/vsm/vsm/docsumconfig.cpp b/vsm/src/vespa/vsm/vsm/docsumconfig.cpp
index 2512bea26df..fb25df83ded 100644
--- a/vsm/src/vespa/vsm/vsm/docsumconfig.cpp
+++ b/vsm/src/vespa/vsm/vsm/docsumconfig.cpp
@@ -26,6 +26,9 @@ void populate_fields(MatchingElementsFields& fields, VsmfieldsConfig& fields_con
if (spec.name.substr(0, prefix.size()) == prefix) {
fields.add_mapping(field_name, spec.name);
}
+ if (spec.name == field_name) {
+ fields.add_field(field_name);
+ }
}
}