diff options
Diffstat (limited to 'config-model/src/main/java/com/yahoo/searchdefinition/processing/SummaryConsistency.java')
-rw-r--r-- | config-model/src/main/java/com/yahoo/searchdefinition/processing/SummaryConsistency.java | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/SummaryConsistency.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/SummaryConsistency.java index d2c4968ca26..a4ad3964d47 100644 --- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/SummaryConsistency.java +++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/SummaryConsistency.java @@ -8,11 +8,14 @@ import com.yahoo.searchdefinition.RankProfileRegistry; import com.yahoo.searchdefinition.document.Attribute; import com.yahoo.document.WeightedSetDataType; import com.yahoo.searchdefinition.Search; +import com.yahoo.searchdefinition.document.ImmutableSDField; import com.yahoo.vespa.documentmodel.DocumentSummary; import com.yahoo.vespa.documentmodel.SummaryField; import com.yahoo.vespa.documentmodel.SummaryTransform; import com.yahoo.vespa.model.container.search.QueryProfiles; +import static com.yahoo.searchdefinition.document.ComplexAttributeFieldUtils.isComplexFieldWithOnlyStructFieldAttributes; + /** * Ensure that summary field transforms for fields having the same name * are consistent across summary classes @@ -33,6 +36,7 @@ public class SummaryConsistency extends Processor { for (SummaryField summaryField : summary.getSummaryFields() ) { assertConsistency(summaryField, search, validate); makeAttributeTransformIfAppropriate(summaryField, search); + makeAttributeCombinerTransformIfAppropriate(summaryField, search); } } } @@ -63,6 +67,17 @@ public class SummaryConsistency extends Processor { summaryField.setTransform(SummaryTransform.ATTRIBUTE); } + /** If the source is a complex field with only struct field attributes then make this use the attribute combiner transform */ + private void makeAttributeCombinerTransformIfAppropriate(SummaryField summaryField,Search search) { + if (summaryField.getTransform() == SummaryTransform.NONE) { + String source_field_name = summaryField.getSingleSource(); + ImmutableSDField source = search.getField(source_field_name); + if (source != null && isComplexFieldWithOnlyStructFieldAttributes(source)) { + summaryField.setTransform(SummaryTransform.ATTRIBUTECOMBINER); + } + } + } + private void assertConsistentTypes(SummaryField existing, SummaryField seen) { if (existing.getDataType() instanceof WeightedSetDataType && seen.getDataType() instanceof WeightedSetDataType && ((WeightedSetDataType)existing.getDataType()).getNestedType().equals(((WeightedSetDataType)seen.getDataType()).getNestedType())) |