aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--config-model/src/main/java/com/yahoo/schema/derived/DerivedConfiguration.java9
-rw-r--r--config-model/src/main/java/com/yahoo/schema/derived/SchemaInfo.java20
-rw-r--r--config-model/src/main/java/com/yahoo/schema/derived/SummaryClass.java51
-rw-r--r--config-model/src/main/java/com/yahoo/schema/derived/SummaryClassField.java2
-rw-r--r--config-model/src/main/java/com/yahoo/schema/derived/SummaryMap.java133
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/content/ContentSearchCluster.java2
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/search/DocumentDatabase.java4
-rw-r--r--config-model/src/main/java/com/yahoo/vespa/model/search/StreamingSearchCluster.java8
-rw-r--r--config-model/src/test/derived/advanced/summarymap.cfg13
-rw-r--r--config-model/src/test/derived/array_of_struct_attribute/summarymap.cfg16
-rw-r--r--config-model/src/test/derived/attributeprefetch/summarymap.cfg28
-rw-r--r--config-model/src/test/derived/attributes/summarymap.cfg55
-rw-r--r--config-model/src/test/derived/complex/summarymap.cfg34
-rw-r--r--config-model/src/test/derived/emptydefault/summarymap.cfg10
-rw-r--r--config-model/src/test/derived/id/summarymap.cfg10
-rw-r--r--config-model/src/test/derived/imported_position_field/summarymap.cfg10
-rw-r--r--config-model/src/test/derived/imported_position_field_summary/summarymap.cfg13
-rw-r--r--config-model/src/test/derived/imported_struct_fields/summarymap.cfg28
-rw-r--r--config-model/src/test/derived/importedfields/summarymap.cfg28
-rw-r--r--config-model/src/test/derived/indexswitches/summarymap.cfg10
-rw-r--r--config-model/src/test/derived/inheritance/summarymap.cfg19
-rw-r--r--config-model/src/test/derived/inheritfromparent/summary.cfg36
-rw-r--r--config-model/src/test/derived/inheritfromparent/summarymap.cfg13
-rw-r--r--config-model/src/test/derived/mail/summarymap.cfg16
-rw-r--r--config-model/src/test/derived/map_attribute/summarymap.cfg13
-rw-r--r--config-model/src/test/derived/map_of_struct_attribute/summarymap.cfg19
-rw-r--r--config-model/src/test/derived/multiplesummaries/summarymap.cfg58
-rw-r--r--config-model/src/test/derived/music/summarymap.cfg49
-rw-r--r--config-model/src/test/derived/newrank/summarymap.cfg52
-rw-r--r--config-model/src/test/derived/position_nosummary/summarymap.cfg13
-rw-r--r--config-model/src/test/derived/position_summary/summarymap.cfg16
-rw-r--r--config-model/src/test/derived/predicate_attribute/summarymap.cfg10
-rw-r--r--config-model/src/test/derived/rankingexpression/summarymap.cfg37
-rw-r--r--config-model/src/test/derived/ranktypes/summarymap.cfg10
-rw-r--r--config-model/src/test/derived/reference_fields/summarymap.cfg10
-rw-r--r--config-model/src/test/derived/schemainheritance/summarymap.cfg16
-rw-r--r--config-model/src/test/derived/streamingstruct/summarymap.cfg16
-rw-r--r--config-model/src/test/derived/twostreamingstructs/summarymap.cfg13
-rw-r--r--config-model/src/test/derived/types/summarymap.cfg34
-rw-r--r--config-model/src/test/java/com/yahoo/schema/derived/SummaryMapTestCase.java214
-rw-r--r--config-model/src/test/java/com/yahoo/schema/derived/SummaryTestCase.java113
41 files changed, 199 insertions, 1062 deletions
diff --git a/config-model/src/main/java/com/yahoo/schema/derived/DerivedConfiguration.java b/config-model/src/main/java/com/yahoo/schema/derived/DerivedConfiguration.java
index 0f5721bbab3..c6a5873a848 100644
--- a/config-model/src/main/java/com/yahoo/schema/derived/DerivedConfiguration.java
+++ b/config-model/src/main/java/com/yahoo/schema/derived/DerivedConfiguration.java
@@ -28,7 +28,6 @@ public class DerivedConfiguration implements AttributesConfig.Producer {
private final Schema schema;
private Summaries summaries;
- private SummaryMap summaryMap;
private Juniperrc juniperrc;
private AttributeFields attributeFields;
private RankProfileList rankProfileList;
@@ -80,12 +79,11 @@ public class DerivedConfiguration implements AttributesConfig.Producer {
if ( ! schema.isDocumentsOnly()) {
attributeFields = new AttributeFields(schema);
summaries = new Summaries(schema, deployState.getDeployLogger(), deployState.getProperties().featureFlags());
- summaryMap = new SummaryMap(schema);
juniperrc = new Juniperrc(schema);
rankProfileList = new RankProfileList(schema, schema.rankExpressionFiles(), attributeFields, deployState);
indexingScript = new IndexingScript(schema);
indexInfo = new IndexInfo(schema);
- schemaInfo = new SchemaInfo(schema, deployState.rankProfileRegistry(), summaries, summaryMap);
+ schemaInfo = new SchemaInfo(schema, deployState.rankProfileRegistry(), summaries);
indexSchema = new IndexSchema(schema);
importedFields = new ImportedFields(schema);
}
@@ -101,7 +99,6 @@ public class DerivedConfiguration implements AttributesConfig.Producer {
public void export(String toDirectory) throws IOException {
if (!schema.isDocumentsOnly()) {
summaries.export(toDirectory);
- summaryMap.export(toDirectory);
juniperrc.export(toDirectory);
attributeFields.export(toDirectory);
streamingFields.export(toDirectory);
@@ -199,10 +196,6 @@ public class DerivedConfiguration implements AttributesConfig.Producer {
return juniperrc;
}
- public SummaryMap getSummaryMap() {
- return summaryMap;
- }
-
public ImportedFields getImportedFields() {
return importedFields;
}
diff --git a/config-model/src/main/java/com/yahoo/schema/derived/SchemaInfo.java b/config-model/src/main/java/com/yahoo/schema/derived/SchemaInfo.java
index 18c6f335787..517a43fe129 100644
--- a/config-model/src/main/java/com/yahoo/schema/derived/SchemaInfo.java
+++ b/config-model/src/main/java/com/yahoo/schema/derived/SchemaInfo.java
@@ -6,7 +6,6 @@ import com.yahoo.schema.RankProfile;
import com.yahoo.schema.RankProfileRegistry;
import com.yahoo.schema.Schema;
import com.yahoo.searchlib.rankingexpression.Reference;
-import com.yahoo.vespa.documentmodel.SummaryTransform;
import java.util.Collection;
import java.util.Collections;
@@ -27,14 +26,11 @@ public final class SchemaInfo extends Derived implements SchemaInfoConfig.Produc
private final Map<String, RankProfileInfo> rankProfiles;
private final Summaries summaries;
- private final SummaryMap summaryMap;
- public SchemaInfo(Schema schema, RankProfileRegistry rankProfileRegistry,
- Summaries summaries, SummaryMap summaryMap) {
+ public SchemaInfo(Schema schema, RankProfileRegistry rankProfileRegistry, Summaries summaries) {
this.schema = schema;
this.rankProfiles = Collections.unmodifiableMap(toRankProfiles(rankProfileRegistry.rankProfilesOf(schema)));
this.summaries = summaries;
- this.summaryMap = summaryMap;
}
public String name() { return schema.getName(); }
@@ -69,25 +65,13 @@ public final class SchemaInfo extends Derived implements SchemaInfoConfig.Produc
var fieldsBuilder = new SchemaInfoConfig.Schema.Summaryclass.Fields.Builder();
fieldsBuilder.name(field.getName())
.type(field.getType().getName())
- .dynamic(isDynamic(field.getName()));
+ .dynamic(SummaryClass.commandRequiringQuery(field.getCommand()));
summaryBuilder.fields(fieldsBuilder);
}
schemaBuilder.summaryclass(summaryBuilder);
}
}
- /** Returns whether the given field is a dynamic summary field. */
- private boolean isDynamic(String fieldName) {
- if (summaryMap == null) return false; // not know for streaming, but also not used
-
- var fieldTransform = summaryMap.resultTransforms().get(fieldName);
- if (fieldTransform == null) return false;
- // TODO: Move this into SummaryTransform and call it something else than "dynamic"
- return fieldTransform.getTransform().isDynamic() ||
- fieldTransform.getTransform() == SummaryTransform.MATCHED_ELEMENTS_FILTER ||
- fieldTransform.getTransform() == SummaryTransform.MATCHED_ATTRIBUTE_ELEMENTS_FILTER;
- }
-
private void addRankProfilesConfig(SchemaInfoConfig.Schema.Builder schemaBuilder) {
for (RankProfileInfo rankProfile : rankProfiles().values()) {
var rankProfileConfig = new SchemaInfoConfig.Schema.Rankprofile.Builder();
diff --git a/config-model/src/main/java/com/yahoo/schema/derived/SummaryClass.java b/config-model/src/main/java/com/yahoo/schema/derived/SummaryClass.java
index 9cd5d901574..b8aa89fc82a 100644
--- a/config-model/src/main/java/com/yahoo/schema/derived/SummaryClass.java
+++ b/config-model/src/main/java/com/yahoo/schema/derived/SummaryClass.java
@@ -69,7 +69,7 @@ public class SummaryClass extends Derived {
accessingDiskSummary = true;
}
addField(summaryField.getName(), summaryField.getDataType(), summaryField.getTransform(),
- SummaryMap.getSource(summaryField), fields);
+ getSource(summaryField), fields);
}
}
@@ -130,4 +130,53 @@ public class SummaryClass extends Derived {
return "summary class '" + getName() + "'";
}
+ /** Returns the command name of a transform */
+ static String getCommand(SummaryTransform transform) {
+ if (transform == SummaryTransform.NONE) {
+ return "";
+ } else if (transform == SummaryTransform.DISTANCE) {
+ return "absdist";
+ } else if (transform.isDynamic()) {
+ return "dynamicteaser";
+ } else {
+ return transform.getName();
+ }
+ }
+
+ static String getSource(SummaryField summaryField) {
+ if (summaryField.getTransform() == SummaryTransform.NONE) {
+ return "";
+ }
+
+ if (summaryField.getTransform() == SummaryTransform.ATTRIBUTE ||
+ (summaryField.getTransform() == SummaryTransform.ATTRIBUTECOMBINER && summaryField.hasExplicitSingleSource()) ||
+ summaryField.getTransform() == SummaryTransform.COPY ||
+ summaryField.getTransform() == SummaryTransform.DISTANCE ||
+ summaryField.getTransform() == SummaryTransform.GEOPOS ||
+ summaryField.getTransform() == SummaryTransform.POSITIONS ||
+ summaryField.getTransform() == SummaryTransform.MATCHED_ELEMENTS_FILTER ||
+ summaryField.getTransform() == SummaryTransform.MATCHED_ATTRIBUTE_ELEMENTS_FILTER)
+ {
+ return summaryField.getSingleSource();
+ } else {
+ // Note: Currently source mapping is handled in the indexing statement,
+ // by creating a summary field for each of the values
+ // This works, but is suboptimal. We could consolidate to a minimal set and
+ // use the right value from the minimal set as the third parameter here,
+ // and add "override" commands to multiple static values
+ boolean useFieldNameAsArgument = summaryField.getTransform().isDynamic();
+ return useFieldNameAsArgument ? summaryField.getName() : "";
+ }
+ }
+
+ /**
+ * A dynamic transform that needs the query to perform its computations.
+ * We need this because some model information is shared through configs instead of model - see usage
+ */
+ static boolean commandRequiringQuery(String commandName) {
+ return (commandName.equals("dynamicteaser") ||
+ commandName.equals(SummaryTransform.MATCHED_ELEMENTS_FILTER.getName()) ||
+ commandName.equals(SummaryTransform.MATCHED_ATTRIBUTE_ELEMENTS_FILTER.getName()));
+ }
+
}
diff --git a/config-model/src/main/java/com/yahoo/schema/derived/SummaryClassField.java b/config-model/src/main/java/com/yahoo/schema/derived/SummaryClassField.java
index 00972895306..ec7869857cd 100644
--- a/config-model/src/main/java/com/yahoo/schema/derived/SummaryClassField.java
+++ b/config-model/src/main/java/com/yahoo/schema/derived/SummaryClassField.java
@@ -72,7 +72,7 @@ public class SummaryClassField {
public SummaryClassField(String name, DataType type, SummaryTransform transform, String source, boolean rawAsBase64) {
this.name = name;
this.type = convertDataType(type, transform, rawAsBase64);
- this.command = SummaryMap.getCommand(transform);
+ this.command = SummaryClass.getCommand(transform);
this.source = source;
}
diff --git a/config-model/src/main/java/com/yahoo/schema/derived/SummaryMap.java b/config-model/src/main/java/com/yahoo/schema/derived/SummaryMap.java
deleted file mode 100644
index cecf3ecdd85..00000000000
--- a/config-model/src/main/java/com/yahoo/schema/derived/SummaryMap.java
+++ /dev/null
@@ -1,133 +0,0 @@
-// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.schema.derived;
-
-import com.yahoo.schema.Schema;
-import com.yahoo.schema.document.ImmutableSDField;
-import com.yahoo.vespa.config.search.SummarymapConfig;
-import com.yahoo.vespa.documentmodel.DocumentSummary;
-import com.yahoo.vespa.documentmodel.SummaryField;
-import com.yahoo.vespa.documentmodel.SummaryTransform;
-
-import java.util.Collections;
-import java.util.Map;
-
-/**
- * A summary map (describing search-time summary field transformations)
- * derived from a Schema.
- *
- * @author bratseth
- */
-public class SummaryMap extends Derived implements SummarymapConfig.Producer {
-
- private final Map<String, FieldResultTransform> resultTransforms = new java.util.LinkedHashMap<>();
-
- /** Creates a summary map from a search definition */
- SummaryMap(Schema schema) {
- derive(schema);
- }
-
- protected void derive(Schema schema) {
- for (DocumentSummary documentSummary : schema.getSummaries().values()) {
- derive(documentSummary);
- }
- addSummaryTransformForDocumentId();
- super.derive(schema);
- }
-
- @Override
- protected void derive(ImmutableSDField field, Schema schema) {
- }
-
- private void addSummaryTransformForDocumentId() {
- // The 'documentid' field is added to the 'default' summary class in SummaryClass.deriveImplicitFields().
- // This ensures the corresponding transform is added as well.
- if (!resultTransforms.containsKey(SummaryClass.DOCUMENT_ID_FIELD)) {
- resultTransforms.put(SummaryClass.DOCUMENT_ID_FIELD,
- new FieldResultTransform(SummaryClass.DOCUMENT_ID_FIELD, SummaryTransform.DOCUMENT_ID, ""));
- }
- }
-
- private void derive(DocumentSummary documentSummary) {
- for (SummaryField summaryField : documentSummary.getSummaryFields().values()) {
- if (summaryField.getTransform()== SummaryTransform.NONE) {
- continue;
- }
-
- resultTransforms.put(summaryField.getName(),
- new FieldResultTransform(summaryField.getName(),
- summaryField.getTransform(),
- getSource(summaryField)));
- }
- }
-
- /** Returns a read-only iterator of the FieldResultTransforms of this summary map */
- public Map<String, FieldResultTransform> resultTransforms() {
- return Collections.unmodifiableMap(resultTransforms);
- }
-
- protected String getDerivedName() { return "summarymap"; }
-
- /** Returns the command name of a transform */
- static String getCommand(SummaryTransform transform) {
- if (transform == SummaryTransform.NONE) {
- return "";
- } else if (transform == SummaryTransform.DISTANCE) {
- return "absdist";
- } else if (transform.isDynamic()) {
- return "dynamicteaser";
- } else {
- return transform.getName();
- }
- }
-
- static String getSource(SummaryField summaryField) {
- if (summaryField.getTransform() == SummaryTransform.NONE) {
- return "";
- }
-
- if (summaryField.getTransform() == SummaryTransform.ATTRIBUTE ||
- (summaryField.getTransform() == SummaryTransform.ATTRIBUTECOMBINER && summaryField.hasExplicitSingleSource()) ||
- summaryField.getTransform() == SummaryTransform.COPY ||
- summaryField.getTransform() == SummaryTransform.DISTANCE ||
- summaryField.getTransform() == SummaryTransform.GEOPOS ||
- summaryField.getTransform() == SummaryTransform.POSITIONS ||
- summaryField.getTransform() == SummaryTransform.MATCHED_ELEMENTS_FILTER ||
- summaryField.getTransform() == SummaryTransform.MATCHED_ATTRIBUTE_ELEMENTS_FILTER)
- {
- return summaryField.getSingleSource();
- } else {
- // Note: Currently source mapping is handled in the indexing statement,
- // by creating a summary field for each of the values
- // This works, but is suboptimal. We could consolidate to a minimal set and
- // use the right value from the minimal set as the third parameter here,
- // and add "override" commands to multiple static values
- boolean useFieldNameAsArgument = summaryField.getTransform().isDynamic();
- return useFieldNameAsArgument ? summaryField.getName() : "";
- }
- }
-
- /**
- * Does this summary command name stand for a dynamic transform?
- * We need this because some model information is shared through configs instead of model - see usage
- * A dynamic transform needs the query to perform its computations.
- */
- // TODO/Note: "dynamic" here means something else than in SummaryTransform
- static boolean isDynamicCommand(String commandName) {
- return (commandName.equals("dynamicteaser") ||
- commandName.equals(SummaryTransform.MATCHED_ELEMENTS_FILTER.getName()) ||
- commandName.equals(SummaryTransform.MATCHED_ATTRIBUTE_ELEMENTS_FILTER.getName()));
- }
-
- @Override
- public void getConfig(SummarymapConfig.Builder builder) {
- builder.defaultoutputclass(-1);
- for (FieldResultTransform frt : resultTransforms.values()) {
- SummarymapConfig.Override.Builder oB = new SummarymapConfig.Override.Builder()
- .field(frt.getFieldName())
- .command(getCommand(frt.getTransform()))
- .arguments(frt.getArgument());
- builder.override(oB);
- }
- }
-
-}
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/content/ContentSearchCluster.java b/config-model/src/main/java/com/yahoo/vespa/model/content/ContentSearchCluster.java
index 6dad3c5f06f..a74cb040631 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/content/ContentSearchCluster.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/content/ContentSearchCluster.java
@@ -245,7 +245,7 @@ public class ContentSearchCluster extends AbstractConfigProducer<SearchCluster>
throw new IllegalArgumentException("Schema '" + schemaDefinitionXMLHandler.getName() + "' referenced in " +
this + " does not exist");
- sc.add(new SchemaInfo(schema, deployState.rankProfileRegistry(), null, null));
+ sc.add(new SchemaInfo(schema, deployState.rankProfileRegistry(), null));
}
}
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/search/DocumentDatabase.java b/config-model/src/main/java/com/yahoo/vespa/model/search/DocumentDatabase.java
index 64a1015d056..46e15d96b55 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/search/DocumentDatabase.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/search/DocumentDatabase.java
@@ -10,7 +10,6 @@ import com.yahoo.vespa.config.search.ImportedFieldsConfig;
import com.yahoo.vespa.config.search.IndexschemaConfig;
import com.yahoo.vespa.config.search.RankProfilesConfig;
import com.yahoo.vespa.config.search.SummaryConfig;
-import com.yahoo.vespa.config.search.SummarymapConfig;
import com.yahoo.vespa.config.search.core.OnnxModelsConfig;
import com.yahoo.vespa.config.search.core.RankingConstantsConfig;
import com.yahoo.vespa.config.search.core.RankingExpressionsConfig;
@@ -32,7 +31,6 @@ public class DocumentDatabase extends AbstractConfigProducer<DocumentDatabase> i
OnnxModelsConfig.Producer,
IndexschemaConfig.Producer,
JuniperrcConfig.Producer,
- SummarymapConfig.Producer,
SummaryConfig.Producer,
ImportedFieldsConfig.Producer,
SchemaInfoConfig.Producer {
@@ -86,8 +84,6 @@ public class DocumentDatabase extends AbstractConfigProducer<DocumentDatabase> i
public void getConfig(JuniperrcConfig.Builder builder) { derivedCfg.getJuniperrc().getConfig(builder); }
@Override
- public void getConfig(SummarymapConfig.Builder builder) { derivedCfg.getSummaryMap().getConfig(builder); }
- @Override
public void getConfig(SummaryConfig.Builder builder) { derivedCfg.getSummaries().getConfig(builder); }
@Override
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/search/StreamingSearchCluster.java b/config-model/src/main/java/com/yahoo/vespa/model/search/StreamingSearchCluster.java
index d12635b76ec..947079fb115 100644
--- a/config-model/src/main/java/com/yahoo/vespa/model/search/StreamingSearchCluster.java
+++ b/config-model/src/main/java/com/yahoo/vespa/model/search/StreamingSearchCluster.java
@@ -12,7 +12,6 @@ import com.yahoo.search.config.SchemaInfoConfig;
import com.yahoo.vespa.config.search.AttributesConfig;
import com.yahoo.vespa.config.search.RankProfilesConfig;
import com.yahoo.vespa.config.search.SummaryConfig;
-import com.yahoo.vespa.config.search.SummarymapConfig;
import com.yahoo.vespa.config.search.vsm.VsmfieldsConfig;
import com.yahoo.vespa.config.search.vsm.VsmsummaryConfig;
import com.yahoo.vespa.configdefinition.IlscriptsConfig;
@@ -28,7 +27,6 @@ public class StreamingSearchCluster extends SearchCluster implements
RankProfilesConfig.Producer,
VsmsummaryConfig.Producer,
VsmfieldsConfig.Producer,
- SummarymapConfig.Producer,
SummaryConfig.Producer {
private final String storageRouteSpec;
@@ -120,12 +118,6 @@ public class StreamingSearchCluster extends SearchCluster implements
}
@Override
- public void getConfig(SummarymapConfig.Builder builder) {
- if (derivedConfig.getSummaryMap() != null)
- derivedConfig.getSummaryMap().getConfig(builder);
- }
-
- @Override
public void getConfig(SummaryConfig.Builder builder) {
if (derivedConfig.getSummaries() != null)
derivedConfig.getSummaries().getConfig(builder);
diff --git a/config-model/src/test/derived/advanced/summarymap.cfg b/config-model/src/test/derived/advanced/summarymap.cfg
deleted file mode 100644
index f91aebe57f9..00000000000
--- a/config-model/src/test/derived/advanced/summarymap.cfg
+++ /dev/null
@@ -1,13 +0,0 @@
-defaultoutputclass -1
-override[].field "rankfeatures"
-override[].command "rankfeatures"
-override[].arguments ""
-override[].field "summaryfeatures"
-override[].command "summaryfeatures"
-override[].arguments ""
-override[].field "location_zcurve"
-override[].command "attribute"
-override[].arguments "location_zcurve"
-override[].field "documentid"
-override[].command "documentid"
-override[].arguments ""
diff --git a/config-model/src/test/derived/array_of_struct_attribute/summarymap.cfg b/config-model/src/test/derived/array_of_struct_attribute/summarymap.cfg
deleted file mode 100644
index 4fb66c0e0b1..00000000000
--- a/config-model/src/test/derived/array_of_struct_attribute/summarymap.cfg
+++ /dev/null
@@ -1,16 +0,0 @@
-defaultoutputclass -1
-override[].field "new_elem_array"
-override[].command "attributecombiner"
-override[].arguments "elem_array"
-override[].field "rankfeatures"
-override[].command "rankfeatures"
-override[].arguments ""
-override[].field "summaryfeatures"
-override[].command "summaryfeatures"
-override[].arguments ""
-override[].field "elem_array"
-override[].command "attributecombiner"
-override[].arguments ""
-override[].field "documentid"
-override[].command "documentid"
-override[].arguments ""
diff --git a/config-model/src/test/derived/attributeprefetch/summarymap.cfg b/config-model/src/test/derived/attributeprefetch/summarymap.cfg
deleted file mode 100644
index ae5e4b5f7c5..00000000000
--- a/config-model/src/test/derived/attributeprefetch/summarymap.cfg
+++ /dev/null
@@ -1,28 +0,0 @@
-defaultoutputclass -1
-override[].field "rankfeatures"
-override[].command "rankfeatures"
-override[].arguments ""
-override[].field "summaryfeatures"
-override[].command "summaryfeatures"
-override[].arguments ""
-override[].field "singlebyte"
-override[].command "attribute"
-override[].arguments "singlebyte"
-override[].field "singleint"
-override[].command "attribute"
-override[].arguments "singleint"
-override[].field "singlelong"
-override[].command "attribute"
-override[].arguments "singlelong"
-override[].field "singlefloat"
-override[].command "attribute"
-override[].arguments "singlefloat"
-override[].field "singledouble"
-override[].command "attribute"
-override[].arguments "singledouble"
-override[].field "singlestring"
-override[].command "attribute"
-override[].arguments "singlestring"
-override[].field "documentid"
-override[].command "documentid"
-override[].arguments ""
diff --git a/config-model/src/test/derived/attributes/summarymap.cfg b/config-model/src/test/derived/attributes/summarymap.cfg
deleted file mode 100644
index 72a5e41e555..00000000000
--- a/config-model/src/test/derived/attributes/summarymap.cfg
+++ /dev/null
@@ -1,55 +0,0 @@
-defaultoutputclass -1
-override[].field "a1"
-override[].command "attribute"
-override[].arguments "a1"
-override[].field "a2"
-override[].command "attribute"
-override[].arguments "a2"
-override[].field "a3"
-override[].command "attribute"
-override[].arguments "a3"
-override[].field "a5"
-override[].command "attribute"
-override[].arguments "a5"
-override[].field "a6"
-override[].command "attribute"
-override[].arguments "a6"
-override[].field "b1"
-override[].command "attribute"
-override[].arguments "b1"
-override[].field "b2"
-override[].command "attribute"
-override[].arguments "b2"
-override[].field "b3"
-override[].command "attribute"
-override[].arguments "b3"
-override[].field "b4"
-override[].command "attribute"
-override[].arguments "b4"
-override[].field "b5"
-override[].command "attribute"
-override[].arguments "b5"
-override[].field "b6"
-override[].command "attribute"
-override[].arguments "b6"
-override[].field "b7"
-override[].command "attribute"
-override[].arguments "b7"
-override[].field "rankfeatures"
-override[].command "rankfeatures"
-override[].arguments ""
-override[].field "summaryfeatures"
-override[].command "summaryfeatures"
-override[].arguments ""
-override[].field "a9"
-override[].command "attribute"
-override[].arguments "a9"
-override[].field "a11"
-override[].command "attribute"
-override[].arguments "a11"
-override[].field "a12"
-override[].command "attribute"
-override[].arguments "a12"
-override[].field "documentid"
-override[].command "documentid"
-override[].arguments ""
diff --git a/config-model/src/test/derived/complex/summarymap.cfg b/config-model/src/test/derived/complex/summarymap.cfg
deleted file mode 100644
index 685b818fc6a..00000000000
--- a/config-model/src/test/derived/complex/summarymap.cfg
+++ /dev/null
@@ -1,34 +0,0 @@
-defaultoutputclass -1
-override[].field "dyntitle"
-override[].command "dynamicteaser"
-override[].arguments "dyntitle"
-override[].field "rankfeatures"
-override[].command "rankfeatures"
-override[].arguments ""
-override[].field "summaryfeatures"
-override[].command "summaryfeatures"
-override[].arguments ""
-override[].field "year_sub"
-override[].command "attribute"
-override[].arguments "year_sub"
-override[].field "prefixenabled"
-override[].command "attribute"
-override[].arguments "prefixenabled"
-override[].field "fleeting2"
-override[].command "attribute"
-override[].arguments "fleeting2"
-override[].field "foundat"
-override[].command "attribute"
-override[].arguments "foundat"
-override[].field "collapseby"
-override[].command "attribute"
-override[].arguments "collapseby"
-override[].field "ts"
-override[].command "attribute"
-override[].arguments "ts"
-override[].field "combineda"
-override[].command "attribute"
-override[].arguments "combineda"
-override[].field "documentid"
-override[].command "documentid"
-override[].arguments ""
diff --git a/config-model/src/test/derived/emptydefault/summarymap.cfg b/config-model/src/test/derived/emptydefault/summarymap.cfg
deleted file mode 100644
index b247ff94bbf..00000000000
--- a/config-model/src/test/derived/emptydefault/summarymap.cfg
+++ /dev/null
@@ -1,10 +0,0 @@
-defaultoutputclass -1
-override[].field "rankfeatures"
-override[].command "rankfeatures"
-override[].arguments ""
-override[].field "summaryfeatures"
-override[].command "summaryfeatures"
-override[].arguments ""
-override[].field "documentid"
-override[].command "documentid"
-override[].arguments ""
diff --git a/config-model/src/test/derived/id/summarymap.cfg b/config-model/src/test/derived/id/summarymap.cfg
deleted file mode 100644
index b247ff94bbf..00000000000
--- a/config-model/src/test/derived/id/summarymap.cfg
+++ /dev/null
@@ -1,10 +0,0 @@
-defaultoutputclass -1
-override[].field "rankfeatures"
-override[].command "rankfeatures"
-override[].arguments ""
-override[].field "summaryfeatures"
-override[].command "summaryfeatures"
-override[].arguments ""
-override[].field "documentid"
-override[].command "documentid"
-override[].arguments ""
diff --git a/config-model/src/test/derived/imported_position_field/summarymap.cfg b/config-model/src/test/derived/imported_position_field/summarymap.cfg
deleted file mode 100644
index b247ff94bbf..00000000000
--- a/config-model/src/test/derived/imported_position_field/summarymap.cfg
+++ /dev/null
@@ -1,10 +0,0 @@
-defaultoutputclass -1
-override[].field "rankfeatures"
-override[].command "rankfeatures"
-override[].arguments ""
-override[].field "summaryfeatures"
-override[].command "summaryfeatures"
-override[].arguments ""
-override[].field "documentid"
-override[].command "documentid"
-override[].arguments ""
diff --git a/config-model/src/test/derived/imported_position_field_summary/summarymap.cfg b/config-model/src/test/derived/imported_position_field_summary/summarymap.cfg
deleted file mode 100644
index c17dcdce267..00000000000
--- a/config-model/src/test/derived/imported_position_field_summary/summarymap.cfg
+++ /dev/null
@@ -1,13 +0,0 @@
-defaultoutputclass -1
-override[].field "my_pos"
-override[].command "geopos"
-override[].arguments "my_pos_zcurve"
-override[].field "rankfeatures"
-override[].command "rankfeatures"
-override[].arguments ""
-override[].field "summaryfeatures"
-override[].command "summaryfeatures"
-override[].arguments ""
-override[].field "documentid"
-override[].command "documentid"
-override[].arguments ""
diff --git a/config-model/src/test/derived/imported_struct_fields/summarymap.cfg b/config-model/src/test/derived/imported_struct_fields/summarymap.cfg
deleted file mode 100644
index 653b0a26b75..00000000000
--- a/config-model/src/test/derived/imported_struct_fields/summarymap.cfg
+++ /dev/null
@@ -1,28 +0,0 @@
-defaultoutputclass -1
-override[].field "documentid"
-override[].command "documentid"
-override[].arguments ""
-override[].field "my_elem_array"
-override[].command "attributecombiner"
-override[].arguments ""
-override[].field "my_elem_map"
-override[].command "attributecombiner"
-override[].arguments ""
-override[].field "my_str_int_map"
-override[].command "attributecombiner"
-override[].arguments ""
-override[].field "rankfeatures"
-override[].command "rankfeatures"
-override[].arguments ""
-override[].field "summaryfeatures"
-override[].command "summaryfeatures"
-override[].arguments ""
-override[].field "elem_array_filtered"
-override[].command "matchedattributeelementsfilter"
-override[].arguments "my_elem_array"
-override[].field "elem_map_filtered"
-override[].command "matchedattributeelementsfilter"
-override[].arguments "my_elem_map"
-override[].field "str_int_map_filtered"
-override[].command "matchedattributeelementsfilter"
-override[].arguments "my_str_int_map"
diff --git a/config-model/src/test/derived/importedfields/summarymap.cfg b/config-model/src/test/derived/importedfields/summarymap.cfg
deleted file mode 100644
index 7a4677301db..00000000000
--- a/config-model/src/test/derived/importedfields/summarymap.cfg
+++ /dev/null
@@ -1,28 +0,0 @@
-defaultoutputclass -1
-override[].field "my_int_field"
-override[].command "attribute"
-override[].arguments "my_int_field"
-override[].field "my_string_field"
-override[].command "attribute"
-override[].arguments "my_string_field"
-override[].field "my_int_array_field"
-override[].command "attribute"
-override[].arguments "my_int_array_field"
-override[].field "my_int_wset_field"
-override[].command "attribute"
-override[].arguments "my_int_wset_field"
-override[].field "my_ancient_int_field"
-override[].command "attribute"
-override[].arguments "my_ancient_int_field"
-override[].field "my_filtered_int_array_field"
-override[].command "matchedattributeelementsfilter"
-override[].arguments "my_int_array_field"
-override[].field "rankfeatures"
-override[].command "rankfeatures"
-override[].arguments ""
-override[].field "summaryfeatures"
-override[].command "summaryfeatures"
-override[].arguments ""
-override[].field "documentid"
-override[].command "documentid"
-override[].arguments ""
diff --git a/config-model/src/test/derived/indexswitches/summarymap.cfg b/config-model/src/test/derived/indexswitches/summarymap.cfg
deleted file mode 100644
index b247ff94bbf..00000000000
--- a/config-model/src/test/derived/indexswitches/summarymap.cfg
+++ /dev/null
@@ -1,10 +0,0 @@
-defaultoutputclass -1
-override[].field "rankfeatures"
-override[].command "rankfeatures"
-override[].arguments ""
-override[].field "summaryfeatures"
-override[].command "summaryfeatures"
-override[].arguments ""
-override[].field "documentid"
-override[].command "documentid"
-override[].arguments ""
diff --git a/config-model/src/test/derived/inheritance/summarymap.cfg b/config-model/src/test/derived/inheritance/summarymap.cfg
deleted file mode 100644
index 7fb5eab0200..00000000000
--- a/config-model/src/test/derived/inheritance/summarymap.cfg
+++ /dev/null
@@ -1,19 +0,0 @@
-defaultoutputclass -1
-override[].field "rankfeatures"
-override[].command "rankfeatures"
-override[].arguments ""
-override[].field "summaryfeatures"
-override[].command "summaryfeatures"
-override[].arguments ""
-override[].field "onlygrandparent"
-override[].command "attribute"
-override[].arguments "onlygrandparent"
-override[].field "overridden"
-override[].command "attribute"
-override[].arguments "overridden"
-override[].field "onlymother"
-override[].command "attribute"
-override[].arguments "onlymother"
-override[].field "documentid"
-override[].command "documentid"
-override[].arguments ""
diff --git a/config-model/src/test/derived/inheritfromparent/summary.cfg b/config-model/src/test/derived/inheritfromparent/summary.cfg
new file mode 100644
index 00000000000..32719e81eb9
--- /dev/null
+++ b/config-model/src/test/derived/inheritfromparent/summary.cfg
@@ -0,0 +1,36 @@
+defaultsummaryid 1561972036
+usev8geopositions true
+classes[].id 1561972036
+classes[].name "default"
+classes[].omitsummaryfeatures false
+classes[].fields[].name "weight"
+classes[].fields[].type "float"
+classes[].fields[].command "attribute"
+classes[].fields[].source "weight"
+classes[].fields[].name "rankfeatures"
+classes[].fields[].type "featuredata"
+classes[].fields[].command "rankfeatures"
+classes[].fields[].source ""
+classes[].fields[].name "summaryfeatures"
+classes[].fields[].type "featuredata"
+classes[].fields[].command "summaryfeatures"
+classes[].fields[].source ""
+classes[].fields[].name "documentid"
+classes[].fields[].type "longstring"
+classes[].fields[].command "documentid"
+classes[].fields[].source ""
+classes[].id 571976254
+classes[].name "attributeprefetch"
+classes[].omitsummaryfeatures false
+classes[].fields[].name "weight"
+classes[].fields[].type "float"
+classes[].fields[].command "attribute"
+classes[].fields[].source "weight"
+classes[].fields[].name "rankfeatures"
+classes[].fields[].type "featuredata"
+classes[].fields[].command "rankfeatures"
+classes[].fields[].source ""
+classes[].fields[].name "summaryfeatures"
+classes[].fields[].type "featuredata"
+classes[].fields[].command "summaryfeatures"
+classes[].fields[].source ""
diff --git a/config-model/src/test/derived/inheritfromparent/summarymap.cfg b/config-model/src/test/derived/inheritfromparent/summarymap.cfg
deleted file mode 100644
index fb1a18ab864..00000000000
--- a/config-model/src/test/derived/inheritfromparent/summarymap.cfg
+++ /dev/null
@@ -1,13 +0,0 @@
-defaultoutputclass -1
-override[].field "weight"
-override[].command "attribute"
-override[].arguments "weight"
-override[].field "rankfeatures"
-override[].command "rankfeatures"
-override[].arguments ""
-override[].field "summaryfeatures"
-override[].command "summaryfeatures"
-override[].arguments ""
-override[].field "documentid"
-override[].command "documentid"
-override[].arguments ""
diff --git a/config-model/src/test/derived/mail/summarymap.cfg b/config-model/src/test/derived/mail/summarymap.cfg
deleted file mode 100644
index 40444944e3a..00000000000
--- a/config-model/src/test/derived/mail/summarymap.cfg
+++ /dev/null
@@ -1,16 +0,0 @@
-defaultoutputclass -1
-override[].field "snippet"
-override[].command "dynamicteaser"
-override[].arguments "snippet"
-override[].field "date"
-override[].command "attribute"
-override[].arguments "date"
-override[].field "attachmentcount"
-override[].command "attribute"
-override[].arguments "attachmentcount"
-override[].field "rankfeatures"
-override[].command "rankfeatures"
-override[].arguments ""
-override[].field "summaryfeatures"
-override[].command "summaryfeatures"
-override[].arguments ""
diff --git a/config-model/src/test/derived/map_attribute/summarymap.cfg b/config-model/src/test/derived/map_attribute/summarymap.cfg
deleted file mode 100644
index f9267fb39d3..00000000000
--- a/config-model/src/test/derived/map_attribute/summarymap.cfg
+++ /dev/null
@@ -1,13 +0,0 @@
-defaultoutputclass -1
-override[].field "str_map"
-override[].command "attributecombiner"
-override[].arguments ""
-override[].field "rankfeatures"
-override[].command "rankfeatures"
-override[].arguments ""
-override[].field "summaryfeatures"
-override[].command "summaryfeatures"
-override[].arguments ""
-override[].field "documentid"
-override[].command "documentid"
-override[].arguments ""
diff --git a/config-model/src/test/derived/map_of_struct_attribute/summarymap.cfg b/config-model/src/test/derived/map_of_struct_attribute/summarymap.cfg
deleted file mode 100644
index 46608a4a885..00000000000
--- a/config-model/src/test/derived/map_of_struct_attribute/summarymap.cfg
+++ /dev/null
@@ -1,19 +0,0 @@
-defaultoutputclass -1
-override[].field "new_str_elem_map"
-override[].command "attributecombiner"
-override[].arguments "str_elem_map"
-override[].field "new_int_elem_map"
-override[].command "copy"
-override[].arguments "int_elem_map"
-override[].field "rankfeatures"
-override[].command "rankfeatures"
-override[].arguments ""
-override[].field "summaryfeatures"
-override[].command "summaryfeatures"
-override[].arguments ""
-override[].field "str_elem_map"
-override[].command "attributecombiner"
-override[].arguments ""
-override[].field "documentid"
-override[].command "documentid"
-override[].arguments ""
diff --git a/config-model/src/test/derived/multiplesummaries/summarymap.cfg b/config-model/src/test/derived/multiplesummaries/summarymap.cfg
deleted file mode 100644
index ee61fac39f4..00000000000
--- a/config-model/src/test/derived/multiplesummaries/summarymap.cfg
+++ /dev/null
@@ -1,58 +0,0 @@
-defaultoutputclass -1
-override[].field "a"
-override[].command "attribute"
-override[].arguments "a"
-override[].field "adynamic"
-override[].command "dynamicteaser"
-override[].arguments "adynamic"
-override[].field "d"
-override[].command "dynamicteaser"
-override[].arguments "d"
-override[].field "rankfeatures"
-override[].command "rankfeatures"
-override[].arguments ""
-override[].field "summaryfeatures"
-override[].command "summaryfeatures"
-override[].arguments ""
-override[].field "c"
-override[].command "attribute"
-override[].arguments "c"
-override[].field "adynamic2"
-override[].command "dynamicteaser"
-override[].arguments "adynamic2"
-override[].field "sometags"
-override[].command "matchedelementsfilter"
-override[].arguments "mytags"
-override[].field "anothera"
-override[].command "attribute"
-override[].arguments "a"
-override[].field "anotdynamic"
-override[].command "attribute"
-override[].arguments "adynamic"
-override[].field "loc_position"
-override[].command "attribute"
-override[].arguments "loc_pos_zcurve"
-override[].field "anotbolded"
-override[].command "attribute"
-override[].arguments "a"
-override[].field "loc_pos_zcurve"
-override[].command "attribute"
-override[].arguments "loc_pos_zcurve"
-override[].field "abolded2"
-override[].command "dynamicteaser"
-override[].arguments "abolded2"
-override[].field "aboldeddynamic"
-override[].command "dynamicteaser"
-override[].arguments "aboldeddynamic"
-override[].field "loc_pos"
-override[].command "geopos"
-override[].arguments "loc_pos_zcurve"
-override[].field "abolded"
-override[].command "dynamicteaser"
-override[].arguments "abolded"
-override[].field "dynamice"
-override[].command "dynamicteaser"
-override[].arguments "dynamice"
-override[].field "documentid"
-override[].command "documentid"
-override[].arguments ""
diff --git a/config-model/src/test/derived/music/summarymap.cfg b/config-model/src/test/derived/music/summarymap.cfg
deleted file mode 100644
index 2973d4f6750..00000000000
--- a/config-model/src/test/derived/music/summarymap.cfg
+++ /dev/null
@@ -1,49 +0,0 @@
-defaultoutputclass -1
-override[].field "bgndata"
-override[].command "dynamicteaser"
-override[].arguments "bgndata"
-override[].field "sales"
-override[].command "attribute"
-override[].arguments "sales"
-override[].field "pto"
-override[].command "attribute"
-override[].arguments "pto"
-override[].field "mid"
-override[].command "attribute"
-override[].arguments "mid"
-override[].field "ew"
-override[].command "dynamicteaser"
-override[].arguments "ew"
-override[].field "weight"
-override[].command "attribute"
-override[].arguments "weight"
-override[].field "song"
-override[].command "dynamicteaser"
-override[].arguments "song"
-override[].field "bgnpfrom"
-override[].command "attribute"
-override[].arguments "bgnpfrom"
-override[].field "newestedition"
-override[].command "attribute"
-override[].arguments "newestedition"
-override[].field "bgnpto"
-override[].command "dynamicteaser"
-override[].arguments "bgnpto"
-override[].field "year"
-override[].command "attribute"
-override[].arguments "year"
-override[].field "did"
-override[].command "attribute"
-override[].arguments "did"
-override[].field "cbid"
-override[].command "attribute"
-override[].arguments "cbid"
-override[].field "rankfeatures"
-override[].command "rankfeatures"
-override[].arguments ""
-override[].field "summaryfeatures"
-override[].command "summaryfeatures"
-override[].arguments ""
-override[].field "documentid"
-override[].command "documentid"
-override[].arguments ""
diff --git a/config-model/src/test/derived/newrank/summarymap.cfg b/config-model/src/test/derived/newrank/summarymap.cfg
deleted file mode 100644
index e769e3a2a5a..00000000000
--- a/config-model/src/test/derived/newrank/summarymap.cfg
+++ /dev/null
@@ -1,52 +0,0 @@
-defaultoutputclass -1
-override[].field "bgndata"
-override[].command "dynamicteaser"
-override[].arguments "bgndata"
-override[].field "sales"
-override[].command "attribute"
-override[].arguments "sales"
-override[].field "pto"
-override[].command "attribute"
-override[].arguments "pto"
-override[].field "mid"
-override[].command "attribute"
-override[].arguments "mid"
-override[].field "ew"
-override[].command "dynamicteaser"
-override[].arguments "ew"
-override[].field "weight"
-override[].command "attribute"
-override[].arguments "weight"
-override[].field "song"
-override[].command "dynamicteaser"
-override[].arguments "song"
-override[].field "bgnpfrom"
-override[].command "attribute"
-override[].arguments "bgnpfrom"
-override[].field "newestedition"
-override[].command "attribute"
-override[].arguments "newestedition"
-override[].field "bgnpto"
-override[].command "dynamicteaser"
-override[].arguments "bgnpto"
-override[].field "year"
-override[].command "attribute"
-override[].arguments "year"
-override[].field "did"
-override[].command "attribute"
-override[].arguments "did"
-override[].field "scorekey"
-override[].command "attribute"
-override[].arguments "scorekey"
-override[].field "cbid"
-override[].command "attribute"
-override[].arguments "cbid"
-override[].field "rankfeatures"
-override[].command "rankfeatures"
-override[].arguments ""
-override[].field "summaryfeatures"
-override[].command "summaryfeatures"
-override[].arguments ""
-override[].field "documentid"
-override[].command "documentid"
-override[].arguments ""
diff --git a/config-model/src/test/derived/position_nosummary/summarymap.cfg b/config-model/src/test/derived/position_nosummary/summarymap.cfg
deleted file mode 100644
index 2ed737b5205..00000000000
--- a/config-model/src/test/derived/position_nosummary/summarymap.cfg
+++ /dev/null
@@ -1,13 +0,0 @@
-defaultoutputclass -1
-override[].field "rankfeatures"
-override[].command "rankfeatures"
-override[].arguments ""
-override[].field "summaryfeatures"
-override[].command "summaryfeatures"
-override[].arguments ""
-override[].field "pos_zcurve"
-override[].command "attribute"
-override[].arguments "pos_zcurve"
-override[].field "documentid"
-override[].command "documentid"
-override[].arguments ""
diff --git a/config-model/src/test/derived/position_summary/summarymap.cfg b/config-model/src/test/derived/position_summary/summarymap.cfg
deleted file mode 100644
index d34c4727810..00000000000
--- a/config-model/src/test/derived/position_summary/summarymap.cfg
+++ /dev/null
@@ -1,16 +0,0 @@
-defaultoutputclass -1
-override[].field "pos"
-override[].command "geopos"
-override[].arguments "pos_zcurve"
-override[].field "rankfeatures"
-override[].command "rankfeatures"
-override[].arguments ""
-override[].field "summaryfeatures"
-override[].command "summaryfeatures"
-override[].arguments ""
-override[].field "pos_zcurve"
-override[].command "attribute"
-override[].arguments "pos_zcurve"
-override[].field "documentid"
-override[].command "documentid"
-override[].arguments ""
diff --git a/config-model/src/test/derived/predicate_attribute/summarymap.cfg b/config-model/src/test/derived/predicate_attribute/summarymap.cfg
deleted file mode 100644
index b247ff94bbf..00000000000
--- a/config-model/src/test/derived/predicate_attribute/summarymap.cfg
+++ /dev/null
@@ -1,10 +0,0 @@
-defaultoutputclass -1
-override[].field "rankfeatures"
-override[].command "rankfeatures"
-override[].arguments ""
-override[].field "summaryfeatures"
-override[].command "summaryfeatures"
-override[].arguments ""
-override[].field "documentid"
-override[].command "documentid"
-override[].arguments ""
diff --git a/config-model/src/test/derived/rankingexpression/summarymap.cfg b/config-model/src/test/derived/rankingexpression/summarymap.cfg
deleted file mode 100644
index bc8e67320ad..00000000000
--- a/config-model/src/test/derived/rankingexpression/summarymap.cfg
+++ /dev/null
@@ -1,37 +0,0 @@
-defaultoutputclass -1
-override[].field "year"
-override[].command "attribute"
-override[].arguments "year"
-override[].field "rankfeatures"
-override[].command "rankfeatures"
-override[].arguments ""
-override[].field "summaryfeatures"
-override[].command "summaryfeatures"
-override[].arguments ""
-override[].field "foo1"
-override[].command "attribute"
-override[].arguments "foo1"
-override[].field "foo2"
-override[].command "attribute"
-override[].arguments "foo2"
-override[].field "foo3"
-override[].command "attribute"
-override[].arguments "foo3"
-override[].field "foo4"
-override[].command "attribute"
-override[].arguments "foo4"
-override[].field "bar1"
-override[].command "attribute"
-override[].arguments "bar1"
-override[].field "bar2"
-override[].command "attribute"
-override[].arguments "bar2"
-override[].field "bar3"
-override[].command "attribute"
-override[].arguments "bar3"
-override[].field "bar4"
-override[].command "attribute"
-override[].arguments "bar4"
-override[].field "documentid"
-override[].command "documentid"
-override[].arguments ""
diff --git a/config-model/src/test/derived/ranktypes/summarymap.cfg b/config-model/src/test/derived/ranktypes/summarymap.cfg
deleted file mode 100644
index b247ff94bbf..00000000000
--- a/config-model/src/test/derived/ranktypes/summarymap.cfg
+++ /dev/null
@@ -1,10 +0,0 @@
-defaultoutputclass -1
-override[].field "rankfeatures"
-override[].command "rankfeatures"
-override[].arguments ""
-override[].field "summaryfeatures"
-override[].command "summaryfeatures"
-override[].arguments ""
-override[].field "documentid"
-override[].command "documentid"
-override[].arguments ""
diff --git a/config-model/src/test/derived/reference_fields/summarymap.cfg b/config-model/src/test/derived/reference_fields/summarymap.cfg
deleted file mode 100644
index b247ff94bbf..00000000000
--- a/config-model/src/test/derived/reference_fields/summarymap.cfg
+++ /dev/null
@@ -1,10 +0,0 @@
-defaultoutputclass -1
-override[].field "rankfeatures"
-override[].command "rankfeatures"
-override[].arguments ""
-override[].field "summaryfeatures"
-override[].command "summaryfeatures"
-override[].arguments ""
-override[].field "documentid"
-override[].command "documentid"
-override[].arguments ""
diff --git a/config-model/src/test/derived/schemainheritance/summarymap.cfg b/config-model/src/test/derived/schemainheritance/summarymap.cfg
deleted file mode 100644
index 98885124eab..00000000000
--- a/config-model/src/test/derived/schemainheritance/summarymap.cfg
+++ /dev/null
@@ -1,16 +0,0 @@
-defaultoutputclass -1
-override[].field "rankfeatures"
-override[].command "rankfeatures"
-override[].arguments ""
-override[].field "summaryfeatures"
-override[].command "summaryfeatures"
-override[].arguments ""
-override[].field "parent_field"
-override[].command "attribute"
-override[].arguments "parent_field"
-override[].field "child_field"
-override[].command "attribute"
-override[].arguments "child_field"
-override[].field "documentid"
-override[].command "documentid"
-override[].arguments ""
diff --git a/config-model/src/test/derived/streamingstruct/summarymap.cfg b/config-model/src/test/derived/streamingstruct/summarymap.cfg
deleted file mode 100644
index acb9b3491c3..00000000000
--- a/config-model/src/test/derived/streamingstruct/summarymap.cfg
+++ /dev/null
@@ -1,16 +0,0 @@
-defaultoutputclass -1
-override[].field "snippet"
-override[].command "dynamicteaser"
-override[].arguments "snippet"
-override[].field "rankfeatures"
-override[].command "rankfeatures"
-override[].arguments ""
-override[].field "summaryfeatures"
-override[].command "summaryfeatures"
-override[].arguments ""
-override[].field "g"
-override[].command "dynamicteaser"
-override[].arguments "g"
-override[].field "documentid"
-override[].command "documentid"
-override[].arguments ""
diff --git a/config-model/src/test/derived/twostreamingstructs/summarymap.cfg b/config-model/src/test/derived/twostreamingstructs/summarymap.cfg
deleted file mode 100644
index 865c6f733f1..00000000000
--- a/config-model/src/test/derived/twostreamingstructs/summarymap.cfg
+++ /dev/null
@@ -1,13 +0,0 @@
-defaultoutputclass -1
-override[].field "snippet"
-override[].command "dynamicteaser"
-override[].arguments "snippet"
-override[].field "rankfeatures"
-override[].command "rankfeatures"
-override[].arguments ""
-override[].field "summaryfeatures"
-override[].command "summaryfeatures"
-override[].arguments ""
-override[].field "g"
-override[].command "dynamicteaser"
-override[].arguments "g"
diff --git a/config-model/src/test/derived/types/summarymap.cfg b/config-model/src/test/derived/types/summarymap.cfg
deleted file mode 100644
index 21ecb2dd07d..00000000000
--- a/config-model/src/test/derived/types/summarymap.cfg
+++ /dev/null
@@ -1,34 +0,0 @@
-defaultoutputclass -1
-override[].field "abyte"
-override[].command "attribute"
-override[].arguments "abyte"
-override[].field "along"
-override[].command "attribute"
-override[].arguments "along"
-override[].field "abool"
-override[].command "attribute"
-override[].arguments "abool"
-override[].field "ashortfloat"
-override[].command "attribute"
-override[].arguments "ashortfloat"
-override[].field "tagfield"
-override[].command "attribute"
-override[].arguments "tagfield"
-override[].field "album1"
-override[].command "attribute"
-override[].arguments "album1"
-override[].field "rankfeatures"
-override[].command "rankfeatures"
-override[].arguments ""
-override[].field "summaryfeatures"
-override[].command "summaryfeatures"
-override[].arguments ""
-override[].field "other"
-override[].command "attribute"
-override[].arguments "other"
-override[].field "juletre"
-override[].command "attribute"
-override[].arguments "juletre"
-override[].field "documentid"
-override[].command "documentid"
-override[].arguments ""
diff --git a/config-model/src/test/java/com/yahoo/schema/derived/SummaryMapTestCase.java b/config-model/src/test/java/com/yahoo/schema/derived/SummaryMapTestCase.java
deleted file mode 100644
index 577bcf6efcc..00000000000
--- a/config-model/src/test/java/com/yahoo/schema/derived/SummaryMapTestCase.java
+++ /dev/null
@@ -1,214 +0,0 @@
-// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.schema.derived;
-
-import com.yahoo.config.model.test.MockApplicationPackage;
-import com.yahoo.schema.*;
-import com.yahoo.vespa.config.search.SummarymapConfig;
-import com.yahoo.config.model.application.provider.BaseDeployLogger;
-import com.yahoo.document.PositionDataType;
-import com.yahoo.schema.document.SDDocumentType;
-import com.yahoo.schema.document.SDField;
-import com.yahoo.schema.parser.ParseException;
-import com.yahoo.schema.processing.Processing;
-import com.yahoo.vespa.documentmodel.SummaryTransform;
-import com.yahoo.vespa.model.container.search.QueryProfiles;
-import org.junit.jupiter.api.Test;
-
-import java.io.IOException;
-import java.util.Iterator;
-import java.util.Set;
-
-import static com.yahoo.config.model.test.TestUtil.joinLines;
-import static org.junit.jupiter.api.Assertions.*;
-
-/**
- * Tests summary map extraction
- *
- * @author bratseth
- */
-public class SummaryMapTestCase extends AbstractSchemaTestCase {
- @Test
- void testDeriving() throws IOException, ParseException {
- Schema schema = ApplicationBuilder.buildFromFile("src/test/examples/simple.sd");
- SummaryMap summaryMap = new SummaryMap(schema);
-
- Iterator<FieldResultTransform> transforms = summaryMap.resultTransforms().values().iterator();
- FieldResultTransform transform = transforms.next();
- assertEquals("dyndesc", transform.getFieldName());
- assertEquals(SummaryTransform.DYNAMICTEASER, transform.getTransform());
-
- transform = transforms.next();
- assertEquals("dynlong", transform.getFieldName());
- assertEquals(SummaryTransform.DYNAMICTEASER, transform.getTransform());
-
- transform = transforms.next();
- assertEquals("dyndesc2", transform.getFieldName());
- assertEquals(SummaryTransform.DYNAMICTEASER, transform.getTransform());
-
- transform = transforms.next();
- assertEquals("measurement", transform.getFieldName());
- assertEquals(SummaryTransform.ATTRIBUTE, transform.getTransform());
-
- transform = transforms.next();
- assertEquals("rankfeatures", transform.getFieldName());
- assertEquals(SummaryTransform.RANKFEATURES, transform.getTransform());
-
- transform = transforms.next();
- assertEquals("summaryfeatures", transform.getFieldName());
- assertEquals(SummaryTransform.SUMMARYFEATURES, transform.getTransform());
-
- transform = transforms.next();
- assertEquals("popsiness", transform.getFieldName());
- assertEquals(SummaryTransform.ATTRIBUTE, transform.getTransform());
-
- transform = transforms.next();
- assertEquals("popularity", transform.getFieldName());
- assertEquals(SummaryTransform.ATTRIBUTE, transform.getTransform());
-
- transform = transforms.next();
- assertEquals("access", transform.getFieldName());
- assertEquals(SummaryTransform.ATTRIBUTE, transform.getTransform());
-
- transform = transforms.next();
- assertEquals("documentid", transform.getFieldName());
- assertEquals(SummaryTransform.DOCUMENT_ID, transform.getTransform());
-
- assertFalse(transforms.hasNext());
- }
-
- @Test
- void testPositionDeriving() {
- Schema schema = new Schema("store", MockApplicationPackage.createEmpty());
- SDDocumentType document = new SDDocumentType("store");
- schema.addDocument(document);
- String fieldName = "location";
- SDField field = document.addField(fieldName, PositionDataType.INSTANCE);
- field.parseIndexingScript("{ attribute | summary }");
- new Processing().process(schema, new BaseDeployLogger(), new RankProfileRegistry(), new QueryProfiles(),
- true, false, Set.of());
- SummaryMap summaryMap = new SummaryMap(schema);
-
- Iterator<FieldResultTransform> transforms = summaryMap.resultTransforms().values().iterator();
-
- FieldResultTransform transform = transforms.next();
-
- assertEquals(fieldName, transform.getFieldName());
- assertEquals(SummaryTransform.GEOPOS, transform.getTransform());
-
- transform = transforms.next();
- assertEquals("rankfeatures", transform.getFieldName());
- assertEquals(SummaryTransform.RANKFEATURES, transform.getTransform());
-
- transform = transforms.next();
- assertEquals("summaryfeatures", transform.getFieldName());
- assertEquals(SummaryTransform.SUMMARYFEATURES, transform.getTransform());
-
- transform = transforms.next();
- assertEquals("location_zcurve", transform.getFieldName());
- assertEquals(SummaryTransform.ATTRIBUTE, transform.getTransform());
-
- transform = transforms.next();
- assertEquals("documentid", transform.getFieldName());
- assertEquals(SummaryTransform.DOCUMENT_ID, transform.getTransform());
-
- assertFalse(transforms.hasNext());
-
- SummarymapConfig.Builder scb = new SummarymapConfig.Builder();
- summaryMap.getConfig(scb);
- SummarymapConfig c = scb.build();
-
- assertEquals(-1, c.defaultoutputclass());
- assertEquals(c.override().size(), 5);
-
- assertEquals(c.override(0).field(), fieldName);
- assertEquals(c.override(0).command(), "geopos");
- assertEquals(c.override(0).arguments(), PositionDataType.getZCurveFieldName(fieldName));
-
- assertEquals(c.override(1).field(), "rankfeatures");
- assertEquals(c.override(1).command(), "rankfeatures");
- assertEquals(c.override(1).arguments(), "");
-
- assertEquals(c.override(2).field(), "summaryfeatures");
- assertEquals(c.override(2).command(), "summaryfeatures");
- assertEquals(c.override(2).arguments(), "");
-
- assertEquals(c.override(3).field(), "location_zcurve");
- assertEquals(c.override(3).command(), "attribute");
- assertEquals(c.override(3).arguments(), "location_zcurve");
- }
-
- @Test
- void testFailOnSummaryFieldSourceCollision() {
- try {
- ApplicationBuilder.buildFromFile("src/test/examples/summaryfieldcollision.sd");
- } catch (Exception e) {
- assertTrue(e.getMessage().matches(".*equally named field.*"));
- }
- }
-
- @Test
- void source_field_is_passed_as_argument_in_matched_elements_filter_transforms() throws ParseException {
- assertOverride(joinLines("field my_field type map<string, string> {",
- " indexing: summary",
- " summary: matched-elements-only",
- " struct-field key { indexing: attribute }",
- "}"), "my_field", SummaryTransform.MATCHED_ELEMENTS_FILTER.getName());
-
- assertOverride(joinLines("field my_field type map<string, string> {",
- " indexing: summary",
- " summary: matched-elements-only",
- " struct-field key { indexing: attribute }",
- " struct-field value { indexing: attribute }",
- "}"), "my_field", SummaryTransform.MATCHED_ATTRIBUTE_ELEMENTS_FILTER.getName());
- }
-
- @Test
- void commands_that_are_dynamic_and_require_the_query() {
- assertTrue(SummaryMap.isDynamicCommand("dynamicteaser"));
- assertTrue(SummaryMap.isDynamicCommand(SummaryTransform.MATCHED_ELEMENTS_FILTER.getName()));
- assertTrue(SummaryMap.isDynamicCommand(SummaryTransform.MATCHED_ATTRIBUTE_ELEMENTS_FILTER.getName()));
- assertFalse(SummaryMap.isDynamicCommand(SummaryTransform.ATTRIBUTE.getName()));
- }
-
- @Test
- void documentid_summary_field_has_corresponding_summary_transform() throws ParseException {
- var schema = buildSchema("field foo type string { indexing: summary }",
- joinLines("document-summary bar {",
- " summary documentid type string {}",
- "}"));
- assertOverride(schema, "documentid", SummaryTransform.DOCUMENT_ID.getName(), "");
- }
-
- @Test
- void documentid_summary_transform_requires_disk_access() {
- assertFalse(SummaryTransform.DOCUMENT_ID.isInMemory());
- }
-
- private void assertOverride(String fieldContent, String expFieldName, String expCommand) throws ParseException {
- assertOverride(buildSchema(fieldContent, ""), expFieldName, expCommand, expFieldName);
- }
-
- private void assertOverride(Schema schema, String expFieldName, String expCommand, String expArguments) throws ParseException {
- var summaryMap = new SummaryMap(schema);
- var cfgBuilder = new SummarymapConfig.Builder();
- summaryMap.getConfig(cfgBuilder);
- var cfg = new SummarymapConfig(cfgBuilder);
- var override = cfg.override(0);
- assertEquals(expFieldName, override.field());
- assertEquals(expCommand, override.command());
- assertEquals(expArguments, override.arguments());
- }
-
- private Schema buildSchema(String field, String documentSummary) throws ParseException {
- var builder = new ApplicationBuilder(new RankProfileRegistry());
- builder.addSchema(joinLines("search test {",
- " document test {",
- field,
- " }",
- documentSummary,
- "}"));
- builder.build(true);
- return builder.getSchema();
- }
-
-}
diff --git a/config-model/src/test/java/com/yahoo/schema/derived/SummaryTestCase.java b/config-model/src/test/java/com/yahoo/schema/derived/SummaryTestCase.java
index c83fc1ac63b..2071d142da9 100644
--- a/config-model/src/test/java/com/yahoo/schema/derived/SummaryTestCase.java
+++ b/config-model/src/test/java/com/yahoo/schema/derived/SummaryTestCase.java
@@ -2,19 +2,29 @@
package com.yahoo.schema.derived;
import com.yahoo.config.model.application.provider.BaseDeployLogger;
+import com.yahoo.config.model.test.MockApplicationPackage;
+import com.yahoo.document.PositionDataType;
+import com.yahoo.schema.RankProfileRegistry;
import com.yahoo.schema.Schema;
import com.yahoo.schema.ApplicationBuilder;
import com.yahoo.schema.AbstractSchemaTestCase;
+import com.yahoo.schema.document.SDDocumentType;
+import com.yahoo.schema.document.SDField;
import com.yahoo.schema.parser.ParseException;
+import com.yahoo.schema.processing.Processing;
import com.yahoo.vespa.config.search.SummaryConfig;
+import com.yahoo.vespa.documentmodel.SummaryTransform;
+import com.yahoo.vespa.model.container.search.QueryProfiles;
import org.junit.jupiter.api.Test;
import java.io.IOException;
-import java.util.Iterator;
+import java.util.Set;
import static com.yahoo.config.model.test.TestUtil.joinLines;
import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertTrue;
/**
* Tests summary extraction
@@ -60,10 +70,7 @@ public class SummaryTestCase extends AbstractSchemaTestCase {
SummaryClass summary = new SummaryClass(schema, schema.getSummary("default"), new BaseDeployLogger());
assertEquals("default", summary.getName());
- Iterator<SummaryClassField> fields = summary.fields().values().iterator();
-
- SummaryClassField field;
-
+ var fields = summary.fields().values().iterator();
assertEquals(13, summary.fields().size());
assertSummaryField("exactemento", SummaryClassField.Type.LONGSTRING, fields.next());
@@ -157,4 +164,100 @@ public class SummaryTestCase extends AbstractSchemaTestCase {
assertEquals(expected, config.omitsummaryfeatures());
}
+ @Test
+ void testPositionDeriving() {
+ Schema schema = new Schema("store", MockApplicationPackage.createEmpty());
+ SDDocumentType document = new SDDocumentType("store");
+ schema.addDocument(document);
+ String fieldName = "location";
+ SDField field = document.addField(fieldName, PositionDataType.INSTANCE);
+ field.parseIndexingScript("{ attribute | summary }");
+ new Processing().process(schema, new BaseDeployLogger(), new RankProfileRegistry(), new QueryProfiles(),
+ true, false, Set.of());
+
+ var summary = new SummaryClass(schema, schema.getSummary("default"), new BaseDeployLogger());
+ var fields = summary.fields().values().iterator();
+ assertEquals(4, summary.fields().size());
+ assertSummaryField(fieldName, SummaryClassField.Type.JSONSTRING, "geopos", "location_zcurve", fields.next());
+ assertSummaryField("rankfeatures", SummaryClassField.Type.FEATUREDATA, "rankfeatures", fields.next());
+ assertSummaryField("summaryfeatures", SummaryClassField.Type.FEATUREDATA, "summaryfeatures", fields.next());
+ assertSummaryField("documentid", SummaryClassField.Type.LONGSTRING, "documentid", fields.next());
+ }
+
+ @Test
+ void testFailOnSummaryFieldSourceCollision() {
+ try {
+ ApplicationBuilder.buildFromFile("src/test/examples/summaryfieldcollision.sd");
+ } catch (Exception e) {
+ assertTrue(e.getMessage().matches(".*equally named field.*"));
+ }
+ }
+
+ @Test
+ void source_field_is_passed_as_argument_in_matched_elements_filter_transforms() throws ParseException {
+ assertOverride(joinLines("field my_field type map<string, string> {",
+ " indexing: summary",
+ " summary: matched-elements-only",
+ " struct-field key { indexing: attribute }",
+ "}"), "my_field", SummaryTransform.MATCHED_ELEMENTS_FILTER.getName());
+
+ assertOverride(joinLines("field my_field type map<string, string> {",
+ " indexing: summary",
+ " summary: matched-elements-only",
+ " struct-field key { indexing: attribute }",
+ " struct-field value { indexing: attribute }",
+ "}"), "my_field", SummaryTransform.MATCHED_ATTRIBUTE_ELEMENTS_FILTER.getName());
+ }
+
+ @Test
+ void commands_that_are_dynamic_and_require_the_query() {
+ assertTrue(SummaryClass.commandRequiringQuery("dynamicteaser"));
+ assertTrue(SummaryClass.commandRequiringQuery(SummaryTransform.MATCHED_ELEMENTS_FILTER.getName()));
+ assertTrue(SummaryClass.commandRequiringQuery(SummaryTransform.MATCHED_ATTRIBUTE_ELEMENTS_FILTER.getName()));
+ assertFalse(SummaryClass.commandRequiringQuery(SummaryTransform.ATTRIBUTE.getName()));
+ }
+
+ @Test
+ void documentid_summary_field_has_corresponding_summary_transform() throws ParseException {
+ var schema = buildSchema("field foo type string { indexing: summary }",
+ joinLines("document-summary bar {",
+ " summary documentid type string {}",
+ "}"));
+ assertOverride(schema, "documentid", SummaryTransform.DOCUMENT_ID.getName(), "", "bar");
+ }
+
+ @Test
+ void documentid_summary_transform_requires_disk_access() {
+ assertFalse(SummaryTransform.DOCUMENT_ID.isInMemory());
+ }
+
+ private void assertOverride(String fieldContent, String expFieldName, String expCommand) throws ParseException {
+ assertOverride(buildSchema(fieldContent, ""), expFieldName, expCommand, expFieldName);
+ }
+
+ private void assertOverride(Schema schema, String expFieldName, String expCommand, String expSource) throws ParseException {
+ assertOverride(schema, expFieldName, expCommand, expSource, "default");
+ }
+
+ private void assertOverride(Schema schema, String expFieldName, String expCommand, String expSource, String summaryClass) throws ParseException {
+ var summary = new SummaryClass(schema, schema.getSummary(summaryClass), new BaseDeployLogger());
+ var cfg = new SummaryConfig.Classes(summary.getSummaryClassConfig());
+ var field = cfg.fields(0);
+ assertEquals(expFieldName, field.name());
+ assertEquals(expCommand, field.command());
+ assertEquals(expSource, field.source());
+ }
+
+ private Schema buildSchema(String field, String documentSummary) throws ParseException {
+ var builder = new ApplicationBuilder(new RankProfileRegistry());
+ builder.addSchema(joinLines("search test {",
+ " document test {",
+ field,
+ " }",
+ documentSummary,
+ "}"));
+ builder.build(true);
+ return builder.getSchema();
+ }
+
}