aboutsummaryrefslogtreecommitdiffstats
path: root/config-model/src/main/java/com/yahoo/schema/processing
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@online.no>2023-11-01 15:00:20 +0100
committerTor Egge <Tor.Egge@online.no>2023-11-01 15:00:20 +0100
commite78c6270cf0ee726fb27f267e75f18e536979862 (patch)
tree4a82a9c6c941d8c783b9b3216197c7d196cc714f /config-model/src/main/java/com/yahoo/schema/processing
parent6192b332c6ab2d015c71eb7b8834e01581cf7a9f (diff)
Use "copy" summary transform when field is only defined as summary field.
Diffstat (limited to 'config-model/src/main/java/com/yahoo/schema/processing')
-rw-r--r--config-model/src/main/java/com/yahoo/schema/processing/AddExtraFieldsToDocument.java31
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);
+ }
}