diff options
author | Tor Egge <Tor.Egge@online.no> | 2023-11-01 15:00:20 +0100 |
---|---|---|
committer | Tor Egge <Tor.Egge@online.no> | 2023-11-01 15:00:20 +0100 |
commit | e78c6270cf0ee726fb27f267e75f18e536979862 (patch) | |
tree | 4a82a9c6c941d8c783b9b3216197c7d196cc714f /config-model/src/main/java/com/yahoo/schema | |
parent | 6192b332c6ab2d015c71eb7b8834e01581cf7a9f (diff) |
Use "copy" summary transform when field is only defined as summary field.
Diffstat (limited to 'config-model/src/main/java/com/yahoo/schema')
-rw-r--r-- | config-model/src/main/java/com/yahoo/schema/processing/AddExtraFieldsToDocument.java | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/config-model/src/main/java/com/yahoo/schema/processing/AddExtraFieldsToDocument.java b/config-model/src/main/java/com/yahoo/schema/processing/AddExtraFieldsToDocument.java index 1dd6ead00a4..52652de81d4 100644 --- a/config-model/src/main/java/com/yahoo/schema/processing/AddExtraFieldsToDocument.java +++ b/config-model/src/main/java/com/yahoo/schema/processing/AddExtraFieldsToDocument.java @@ -13,6 +13,9 @@ import com.yahoo.vespa.documentmodel.SummaryField; import com.yahoo.vespa.documentmodel.SummaryTransform; import com.yahoo.vespa.model.container.search.QueryProfiles; +import java.util.LinkedHashSet; +import java.util.Set; + /** * This processor creates a {@link com.yahoo.schema.document.SDDocumentType} for each {@link Schema} * object which holds all the data that search @@ -21,6 +24,8 @@ import com.yahoo.vespa.model.container.search.QueryProfiles; */ public class AddExtraFieldsToDocument extends Processor { + Set<String> extraSummaryFields = new LinkedHashSet<String>(); + AddExtraFieldsToDocument(Schema schema, DeployLogger deployLogger, RankProfileRegistry rankProfileRegistry, QueryProfiles queryProfiles) { super(schema, deployLogger, rankProfileRegistry, queryProfiles); } @@ -48,6 +53,19 @@ public class AddExtraFieldsToDocument extends Processor { } } } + /* + * Don't use extra summary fields when generating summaries. They will not be created nor populated by + * future vespa versions. When vespa version 'X' stops using these fields and vespa version 'Y' stops + * populating the fields, rollback from vespa version >= 'Y' to vespa version < 'X' will break (missing + * summary fields). + */ + for (var docsum : schema.getSummaries().values()) { + for (var summaryField : docsum.getSummaryFields().values()) { + if (extraSummaryFields.contains(summaryField.getName())) { + considerCopyTransformForExtraSummaryField(schema, summaryField); + } + } + } } } @@ -70,6 +88,7 @@ public class AddExtraFieldsToDocument extends Processor { if (existingField == null) { SDField newField = new SDField(document, field.getName(), field.getDataType()); newField.setIsExtraField(true); + extraSummaryFields.add(field.getName()); document.addField(newField); } else if (!existingField.isImportedField()) { document.addField(existingField.asField()); @@ -87,4 +106,16 @@ public class AddExtraFieldsToDocument extends Processor { } document.addField(field); } + + private void considerCopyTransformForExtraSummaryField(Schema schema, SummaryField field) { + if (field.getTransform() == SummaryTransform.NONE && field.hasExplicitSingleSource() && + fieldIsExtraSummaryField(schema, field.getName())) { + field.setTransform(SummaryTransform.COPY); + } + } + + private boolean fieldIsExtraSummaryField(Schema schema, String name) { + var field = schema.getConcreteField(name); + return field == null || extraSummaryFields.contains(name); + } } |