diff options
41 files changed, 255 insertions, 136 deletions
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/derived/SummaryClass.java b/config-model/src/main/java/com/yahoo/searchdefinition/derived/SummaryClass.java index af2168545dc..c173b2c11d9 100644 --- a/config-model/src/main/java/com/yahoo/searchdefinition/derived/SummaryClass.java +++ b/config-model/src/main/java/com/yahoo/searchdefinition/derived/SummaryClass.java @@ -28,6 +28,7 @@ public class SummaryClass extends Derived { /** True if this summary class needs to access summary information on disk */ private boolean accessingDiskSummary = false; private final boolean rawAsBase64; + private final boolean omitSummaryFeatures; /** The summary fields of this indexed by name */ private Map<String,SummaryClassField> fields = new java.util.LinkedHashMap<>(); @@ -44,6 +45,7 @@ public class SummaryClass extends Derived { public SummaryClass(Search search, DocumentSummary summary, DeployLogger deployLogger) { this.deployLogger = deployLogger; this.rawAsBase64 = search.isRawAsBase64(); + this.omitSummaryFeatures = summary.omitSummaryFeatures(); deriveName(summary); deriveFields(search,summary); deriveImplicitFields(summary); @@ -128,7 +130,8 @@ public class SummaryClass extends Derived { } classBuilder. id(id). - name(getName()); + name(getName()). + omitsummaryfeatures(omitSummaryFeatures); for (SummaryClassField field : fields.values() ) { classBuilder.fields(new SummaryConfig.Classes.Fields.Builder(). name(field.getName()). diff --git a/config-model/src/main/java/com/yahoo/vespa/documentmodel/DocumentSummary.java b/config-model/src/main/java/com/yahoo/vespa/documentmodel/DocumentSummary.java index 3c6aa881af4..454d0f08ff0 100644 --- a/config-model/src/main/java/com/yahoo/vespa/documentmodel/DocumentSummary.java +++ b/config-model/src/main/java/com/yahoo/vespa/documentmodel/DocumentSummary.java @@ -14,6 +14,7 @@ import java.util.List; public class DocumentSummary extends FieldView { private boolean fromDisk = false; + private boolean omitSummaryFeatures = false; private DocumentSummary inherited; /** @@ -30,6 +31,14 @@ public class DocumentSummary extends FieldView { /** Returns whether the user has noted explicitly that this summary accesses disk */ public boolean isFromDisk() { return fromDisk; } + public void setOmitSummaryFeatures(boolean value) { + omitSummaryFeatures = value; + } + + public boolean omitSummaryFeatures() { + return omitSummaryFeatures; + } + /** * The model is constrained to ensure that summary fields of the same name * in different classes have the same summary transform, because this is diff --git a/config-model/src/main/javacc/SDParser.jj b/config-model/src/main/javacc/SDParser.jj index c247100db76..fb24b50aa99 100644 --- a/config-model/src/main/javacc/SDParser.jj +++ b/config-model/src/main/javacc/SDParser.jj @@ -291,6 +291,7 @@ TOKEN : | < TO: "to" > | < DIRECT: "direct" > | < FROMDISK: "from-disk" > +| < OMITSUMMARYFEATURES: "omit-summary-features" > | < ALWAYS: "always" > | < ONDEMAND: "on-demand" > | < NEVER: "never" > @@ -1767,6 +1768,7 @@ Object documentSummary(Search search) : lbrace() ( <FROMDISK> { summary.setFromDisk(true); } | + <OMITSUMMARYFEATURES> { summary.setOmitSummaryFeatures(true); } | documentSummaryItem(summary) | <NL> )* diff --git a/config-model/src/test/derived/advanced/summary.cfg b/config-model/src/test/derived/advanced/summary.cfg index a56d0e6aa4f..f497461b460 100644 --- a/config-model/src/test/derived/advanced/summary.cfg +++ b/config-model/src/test/derived/advanced/summary.cfg @@ -1,6 +1,7 @@ defaultsummaryid 1271952241 classes[].id 1271952241 classes[].name "default" +classes[].omitsummaryfeatures false classes[].fields[].name "debug" classes[].fields[].type "longstring" classes[].fields[].name "attributes" @@ -25,6 +26,7 @@ classes[].fields[].name "documentid" classes[].fields[].type "longstring" classes[].id 472092010 classes[].name "attributeprefetch" +classes[].omitsummaryfeatures false classes[].fields[].name "location_zcurve" classes[].fields[].type "int64" classes[].fields[].name "rankfeatures" diff --git a/config-model/src/test/derived/array_of_struct_attribute/summary.cfg b/config-model/src/test/derived/array_of_struct_attribute/summary.cfg index c1679c57d1a..965c875d5ce 100644 --- a/config-model/src/test/derived/array_of_struct_attribute/summary.cfg +++ b/config-model/src/test/derived/array_of_struct_attribute/summary.cfg @@ -1,6 +1,7 @@ defaultsummaryid 252850086 classes[].id 252850086 classes[].name "default" +classes[].omitsummaryfeatures false classes[].fields[].name "elem_array" classes[].fields[].type "jsonstring" classes[].fields[].name "rankfeatures" diff --git a/config-model/src/test/derived/attributeprefetch/summary.cfg b/config-model/src/test/derived/attributeprefetch/summary.cfg index 13b17464946..f0189f9a3c7 100644 --- a/config-model/src/test/derived/attributeprefetch/summary.cfg +++ b/config-model/src/test/derived/attributeprefetch/summary.cfg @@ -1,27 +1,29 @@ defaultsummaryid 1151071433 -classes[0].id 1151071433 -classes[0].name "default" -classes[0].fields[0].name "rankfeatures" -classes[0].fields[0].type "featuredata" -classes[0].fields[1].name "summaryfeatures" -classes[0].fields[1].type "featuredata" -classes[0].fields[2].name "documentid" -classes[0].fields[2].type "longstring" -classes[1].id 1980470965 -classes[1].name "attributeprefetch" -classes[1].fields[0].name "singlebyte" -classes[1].fields[0].type "byte" -classes[1].fields[1].name "singleint" -classes[1].fields[1].type "integer" -classes[1].fields[2].name "singlelong" -classes[1].fields[2].type "int64" -classes[1].fields[3].name "singlefloat" -classes[1].fields[3].type "float" -classes[1].fields[4].name "singledouble" -classes[1].fields[4].type "double" -classes[1].fields[5].name "singlestring" -classes[1].fields[5].type "longstring" -classes[1].fields[6].name "rankfeatures" -classes[1].fields[6].type "featuredata" -classes[1].fields[7].name "summaryfeatures" -classes[1].fields[7].type "featuredata"
\ No newline at end of file +classes[].id 1151071433 +classes[].name "default" +classes[].omitsummaryfeatures false +classes[].fields[].name "rankfeatures" +classes[].fields[].type "featuredata" +classes[].fields[].name "summaryfeatures" +classes[].fields[].type "featuredata" +classes[].fields[].name "documentid" +classes[].fields[].type "longstring" +classes[].id 1980470965 +classes[].name "attributeprefetch" +classes[].omitsummaryfeatures false +classes[].fields[].name "singlebyte" +classes[].fields[].type "byte" +classes[].fields[].name "singleint" +classes[].fields[].type "integer" +classes[].fields[].name "singlelong" +classes[].fields[].type "int64" +classes[].fields[].name "singlefloat" +classes[].fields[].type "float" +classes[].fields[].name "singledouble" +classes[].fields[].type "double" +classes[].fields[].name "singlestring" +classes[].fields[].type "longstring" +classes[].fields[].name "rankfeatures" +classes[].fields[].type "featuredata" +classes[].fields[].name "summaryfeatures" +classes[].fields[].type "featuredata" diff --git a/config-model/src/test/derived/complex/summary.cfg b/config-model/src/test/derived/complex/summary.cfg index 5bb472b5f41..2dac4736d23 100644 --- a/config-model/src/test/derived/complex/summary.cfg +++ b/config-model/src/test/derived/complex/summary.cfg @@ -1,41 +1,43 @@ defaultsummaryid 1506848752 -classes[0].id 1506848752 -classes[0].name "default" -classes[0].fields[0].name "woe" -classes[0].fields[0].type "longstring" -classes[0].fields[1].name "exact" -classes[0].fields[1].type "longstring" -classes[0].fields[2].name "title" -classes[0].fields[2].type "longstring" -classes[0].fields[3].name "dyntitle" -classes[0].fields[3].type "longstring" -classes[0].fields[4].name "source" -classes[0].fields[4].type "longstring" -classes[0].fields[5].name "stringfield" -classes[0].fields[5].type "longstring" -classes[0].fields[6].name "rankfeatures" -classes[0].fields[6].type "featuredata" -classes[0].fields[7].name "summaryfeatures" -classes[0].fields[7].type "featuredata" -classes[0].fields[8].name "documentid" -classes[0].fields[8].type "longstring" -classes[1].id 128090024 -classes[1].name "attributeprefetch" -classes[1].fields[0].name "year_sub" -classes[1].fields[0].type "integer" -classes[1].fields[1].name "prefixenabled" -classes[1].fields[1].type "longstring" -classes[1].fields[2].name "fleeting2" -classes[1].fields[2].type "float" -classes[1].fields[3].name "foundat" -classes[1].fields[3].type "int64" -classes[1].fields[4].name "collapseby" -classes[1].fields[4].type "integer" -classes[1].fields[5].name "ts" -classes[1].fields[5].type "int64" -classes[1].fields[6].name "combineda" -classes[1].fields[6].type "integer" -classes[1].fields[7].name "rankfeatures" -classes[1].fields[7].type "featuredata" -classes[1].fields[8].name "summaryfeatures" -classes[1].fields[8].type "featuredata"
\ No newline at end of file +classes[].id 1506848752 +classes[].name "default" +classes[].omitsummaryfeatures false +classes[].fields[].name "woe" +classes[].fields[].type "longstring" +classes[].fields[].name "exact" +classes[].fields[].type "longstring" +classes[].fields[].name "title" +classes[].fields[].type "longstring" +classes[].fields[].name "dyntitle" +classes[].fields[].type "longstring" +classes[].fields[].name "source" +classes[].fields[].type "longstring" +classes[].fields[].name "stringfield" +classes[].fields[].type "longstring" +classes[].fields[].name "rankfeatures" +classes[].fields[].type "featuredata" +classes[].fields[].name "summaryfeatures" +classes[].fields[].type "featuredata" +classes[].fields[].name "documentid" +classes[].fields[].type "longstring" +classes[].id 128090024 +classes[].name "attributeprefetch" +classes[].omitsummaryfeatures false +classes[].fields[].name "year_sub" +classes[].fields[].type "integer" +classes[].fields[].name "prefixenabled" +classes[].fields[].type "longstring" +classes[].fields[].name "fleeting2" +classes[].fields[].type "float" +classes[].fields[].name "foundat" +classes[].fields[].type "int64" +classes[].fields[].name "collapseby" +classes[].fields[].type "integer" +classes[].fields[].name "ts" +classes[].fields[].type "int64" +classes[].fields[].name "combineda" +classes[].fields[].type "integer" +classes[].fields[].name "rankfeatures" +classes[].fields[].type "featuredata" +classes[].fields[].name "summaryfeatures" +classes[].fields[].type "featuredata" diff --git a/config-model/src/test/derived/emptychild/summary.cfg b/config-model/src/test/derived/emptychild/summary.cfg index ed3a61a5de5..82bed7fd55e 100644 --- a/config-model/src/test/derived/emptychild/summary.cfg +++ b/config-model/src/test/derived/emptychild/summary.cfg @@ -1,6 +1,7 @@ defaultsummaryid 1814603381 classes[].id 1814603381 classes[].name "default" +classes[].omitsummaryfeatures false classes[].fields[].name "a1" classes[].fields[].type "longstring" classes[].fields[].name "rankfeatures" @@ -11,6 +12,7 @@ classes[].fields[].name "documentid" classes[].fields[].type "longstring" classes[].id 1490368133 classes[].name "attributeprefetch" +classes[].omitsummaryfeatures false classes[].fields[].name "a1" classes[].fields[].type "longstring" classes[].fields[].name "rankfeatures" diff --git a/config-model/src/test/derived/emptydefault/summary.cfg b/config-model/src/test/derived/emptydefault/summary.cfg index e47f24b21c3..61294d97b4c 100644 --- a/config-model/src/test/derived/emptydefault/summary.cfg +++ b/config-model/src/test/derived/emptydefault/summary.cfg @@ -1,6 +1,7 @@ defaultsummaryid 1151071433 classes[].id 1151071433 classes[].name "default" +classes[].omitsummaryfeatures false classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" classes[].fields[].name "summaryfeatures" diff --git a/config-model/src/test/derived/id/summary.cfg b/config-model/src/test/derived/id/summary.cfg index dbc9a90ebce..b50b970afe2 100644 --- a/config-model/src/test/derived/id/summary.cfg +++ b/config-model/src/test/derived/id/summary.cfg @@ -1,6 +1,7 @@ defaultsummaryid 1814716401 classes[].id 1814716401 classes[].name "default" +classes[].omitsummaryfeatures false classes[].fields[].name "uri" classes[].fields[].type "longstring" classes[].fields[].name "rankfeatures" diff --git a/config-model/src/test/derived/imported_position_field/summary.cfg b/config-model/src/test/derived/imported_position_field/summary.cfg index 8da2598a5fc..3ab8e7e29e5 100644 --- a/config-model/src/test/derived/imported_position_field/summary.cfg +++ b/config-model/src/test/derived/imported_position_field/summary.cfg @@ -1,17 +1,19 @@ defaultsummaryid 1570252291 -classes[0].id 1570252291 -classes[0].name "default" -classes[0].fields[0].name "parent_ref" -classes[0].fields[0].type "longstring" -classes[0].fields[1].name "rankfeatures" -classes[0].fields[1].type "featuredata" -classes[0].fields[2].name "summaryfeatures" -classes[0].fields[2].type "featuredata" -classes[0].fields[3].name "documentid" -classes[0].fields[3].type "longstring" -classes[1].id 1274088866 -classes[1].name "attributeprefetch" -classes[1].fields[0].name "rankfeatures" -classes[1].fields[0].type "featuredata" -classes[1].fields[1].name "summaryfeatures" -classes[1].fields[1].type "featuredata"
\ No newline at end of file +classes[].id 1570252291 +classes[].name "default" +classes[].omitsummaryfeatures false +classes[].fields[].name "parent_ref" +classes[].fields[].type "longstring" +classes[].fields[].name "rankfeatures" +classes[].fields[].type "featuredata" +classes[].fields[].name "summaryfeatures" +classes[].fields[].type "featuredata" +classes[].fields[].name "documentid" +classes[].fields[].type "longstring" +classes[].id 1274088866 +classes[].name "attributeprefetch" +classes[].omitsummaryfeatures false +classes[].fields[].name "rankfeatures" +classes[].fields[].type "featuredata" +classes[].fields[].name "summaryfeatures" +classes[].fields[].type "featuredata" diff --git a/config-model/src/test/derived/imported_position_field_summary/summary.cfg b/config-model/src/test/derived/imported_position_field_summary/summary.cfg index b607786ca36..76faac23170 100644 --- a/config-model/src/test/derived/imported_position_field_summary/summary.cfg +++ b/config-model/src/test/derived/imported_position_field_summary/summary.cfg @@ -1,6 +1,7 @@ defaultsummaryid 1194448774 classes[].id 1194448774 classes[].name "default" +classes[].omitsummaryfeatures false classes[].fields[].name "parent_ref" classes[].fields[].type "longstring" classes[].fields[].name "rankfeatures" @@ -17,6 +18,7 @@ classes[].fields[].name "documentid" classes[].fields[].type "longstring" classes[].id 890647799 classes[].name "mysummary" +classes[].omitsummaryfeatures false classes[].fields[].name "my_pos" classes[].fields[].type "jsonstring" classes[].fields[].name "rankfeatures" @@ -29,6 +31,7 @@ classes[].fields[].name "my_pos.distance" classes[].fields[].type "integer" classes[].id 1274088866 classes[].name "attributeprefetch" +classes[].omitsummaryfeatures false classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" classes[].fields[].name "summaryfeatures" diff --git a/config-model/src/test/derived/imported_struct_fields/summary.cfg b/config-model/src/test/derived/imported_struct_fields/summary.cfg index 3a9bf4f5e0a..ab6c6853925 100644 --- a/config-model/src/test/derived/imported_struct_fields/summary.cfg +++ b/config-model/src/test/derived/imported_struct_fields/summary.cfg @@ -1,43 +1,47 @@ defaultsummaryid 1570252291 -classes[0].id 1570252291 -classes[0].name "default" -classes[0].fields[0].name "parent_ref" -classes[0].fields[0].type "longstring" -classes[0].fields[1].name "rankfeatures" -classes[0].fields[1].type "featuredata" -classes[0].fields[2].name "summaryfeatures" -classes[0].fields[2].type "featuredata" -classes[0].fields[3].name "documentid" -classes[0].fields[3].type "longstring" -classes[1].id 2126652894 -classes[1].name "mysummary" -classes[1].fields[0].name "documentid" -classes[1].fields[0].type "longstring" -classes[1].fields[1].name "my_elem_array" -classes[1].fields[1].type "jsonstring" -classes[1].fields[2].name "my_elem_map" -classes[1].fields[2].type "jsonstring" -classes[1].fields[3].name "my_str_int_map" -classes[1].fields[3].type "jsonstring" -classes[1].fields[4].name "rankfeatures" -classes[1].fields[4].type "featuredata" -classes[1].fields[5].name "summaryfeatures" -classes[1].fields[5].type "featuredata" -classes[2].id 1629947863 -classes[2].name "filtered" -classes[2].fields[0].name "elem_array_filtered" -classes[2].fields[0].type "jsonstring" -classes[2].fields[1].name "elem_map_filtered" -classes[2].fields[1].type "jsonstring" -classes[2].fields[2].name "str_int_map_filtered" -classes[2].fields[2].type "jsonstring" -classes[2].fields[3].name "rankfeatures" -classes[2].fields[3].type "featuredata" -classes[2].fields[4].name "summaryfeatures" -classes[2].fields[4].type "featuredata" -classes[3].id 1274088866 -classes[3].name "attributeprefetch" -classes[3].fields[0].name "rankfeatures" -classes[3].fields[0].type "featuredata" -classes[3].fields[1].name "summaryfeatures" -classes[3].fields[1].type "featuredata"
\ No newline at end of file +classes[].id 1570252291 +classes[].name "default" +classes[].omitsummaryfeatures false +classes[].fields[].name "parent_ref" +classes[].fields[].type "longstring" +classes[].fields[].name "rankfeatures" +classes[].fields[].type "featuredata" +classes[].fields[].name "summaryfeatures" +classes[].fields[].type "featuredata" +classes[].fields[].name "documentid" +classes[].fields[].type "longstring" +classes[].id 2126652894 +classes[].name "mysummary" +classes[].omitsummaryfeatures false +classes[].fields[].name "documentid" +classes[].fields[].type "longstring" +classes[].fields[].name "my_elem_array" +classes[].fields[].type "jsonstring" +classes[].fields[].name "my_elem_map" +classes[].fields[].type "jsonstring" +classes[].fields[].name "my_str_int_map" +classes[].fields[].type "jsonstring" +classes[].fields[].name "rankfeatures" +classes[].fields[].type "featuredata" +classes[].fields[].name "summaryfeatures" +classes[].fields[].type "featuredata" +classes[].id 1629947863 +classes[].name "filtered" +classes[].omitsummaryfeatures false +classes[].fields[].name "elem_array_filtered" +classes[].fields[].type "jsonstring" +classes[].fields[].name "elem_map_filtered" +classes[].fields[].type "jsonstring" +classes[].fields[].name "str_int_map_filtered" +classes[].fields[].type "jsonstring" +classes[].fields[].name "rankfeatures" +classes[].fields[].type "featuredata" +classes[].fields[].name "summaryfeatures" +classes[].fields[].type "featuredata" +classes[].id 1274088866 +classes[].name "attributeprefetch" +classes[].omitsummaryfeatures false +classes[].fields[].name "rankfeatures" +classes[].fields[].type "featuredata" +classes[].fields[].name "summaryfeatures" +classes[].fields[].type "featuredata" diff --git a/config-model/src/test/derived/importedfields/summary.cfg b/config-model/src/test/derived/importedfields/summary.cfg index f95949cfa62..74b5b44214e 100644 --- a/config-model/src/test/derived/importedfields/summary.cfg +++ b/config-model/src/test/derived/importedfields/summary.cfg @@ -1,6 +1,7 @@ defaultsummaryid 1294344677 classes[].id 1294344677 classes[].name "default" +classes[].omitsummaryfeatures false classes[].fields[].name "b_ref_with_summary" classes[].fields[].type "longstring" classes[].fields[].name "rankfeatures" @@ -11,6 +12,7 @@ classes[].fields[].name "documentid" classes[].fields[].type "longstring" classes[].id 159551552 classes[].name "mysummary" +classes[].omitsummaryfeatures false classes[].fields[].name "a_ref" classes[].fields[].type "longstring" classes[].fields[].name "b_ref_with_summary" @@ -33,6 +35,7 @@ classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" classes[].id 1274088866 classes[].name "attributeprefetch" +classes[].omitsummaryfeatures false classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" classes[].fields[].name "summaryfeatures" diff --git a/config-model/src/test/derived/indexswitches/summary.cfg b/config-model/src/test/derived/indexswitches/summary.cfg index 5bdc8fcdef4..d04bc4eb167 100644 --- a/config-model/src/test/derived/indexswitches/summary.cfg +++ b/config-model/src/test/derived/indexswitches/summary.cfg @@ -1,6 +1,7 @@ defaultsummaryid 1698765342 classes[].id 1698765342 classes[].name "default" +classes[].omitsummaryfeatures false classes[].fields[].name "source" classes[].fields[].type "longstring" classes[].fields[].name "title" diff --git a/config-model/src/test/derived/inheritance/summary.cfg b/config-model/src/test/derived/inheritance/summary.cfg index dde71a1378c..dde9f95ecbe 100644 --- a/config-model/src/test/derived/inheritance/summary.cfg +++ b/config-model/src/test/derived/inheritance/summary.cfg @@ -1,6 +1,7 @@ defaultsummaryid 1797992819 classes[].id 1797992819 classes[].name "default" +classes[].omitsummaryfeatures false classes[].fields[].name "onlyfather" classes[].fields[].type "longstring" classes[].fields[].name "rankfeatures" @@ -11,6 +12,7 @@ classes[].fields[].name "documentid" classes[].fields[].type "longstring" classes[].id 1608562186 classes[].name "attributeprefetch" +classes[].omitsummaryfeatures false classes[].fields[].name "onlygrandparent" classes[].fields[].type "integer" classes[].fields[].name "overridden" diff --git a/config-model/src/test/derived/integerattributetostringindex/summary.cfg b/config-model/src/test/derived/integerattributetostringindex/summary.cfg index 267585e3fda..d5eb316ff01 100644 --- a/config-model/src/test/derived/integerattributetostringindex/summary.cfg +++ b/config-model/src/test/derived/integerattributetostringindex/summary.cfg @@ -1,6 +1,7 @@ defaultsummaryid 1195656216 classes[].id 1195656216 classes[].name "default" +classes[].omitsummaryfeatures false classes[].fields[].name "attinx" classes[].fields[].type "integer" classes[].fields[].name "artist" @@ -17,6 +18,7 @@ classes[].fields[].name "documentid" classes[].fields[].type "longstring" classes[].id 1706878063 classes[].name "attributeprefetch" +classes[].omitsummaryfeatures false classes[].fields[].name "attinx" classes[].fields[].type "integer" classes[].fields[].name "artist" diff --git a/config-model/src/test/derived/map_attribute/summary.cfg b/config-model/src/test/derived/map_attribute/summary.cfg index 24d6cab7697..b465bdfa541 100644 --- a/config-model/src/test/derived/map_attribute/summary.cfg +++ b/config-model/src/test/derived/map_attribute/summary.cfg @@ -1,6 +1,7 @@ defaultsummaryid 1376056200 classes[].id 1376056200 classes[].name "default" +classes[].omitsummaryfeatures false classes[].fields[].name "str_map" classes[].fields[].type "jsonstring" classes[].fields[].name "int_map" diff --git a/config-model/src/test/derived/map_of_struct_attribute/summary.cfg b/config-model/src/test/derived/map_of_struct_attribute/summary.cfg index f70025c8f02..67988dbf30e 100644 --- a/config-model/src/test/derived/map_of_struct_attribute/summary.cfg +++ b/config-model/src/test/derived/map_of_struct_attribute/summary.cfg @@ -1,6 +1,7 @@ defaultsummaryid 1131098132 classes[].id 1131098132 classes[].name "default" +classes[].omitsummaryfeatures false classes[].fields[].name "str_elem_map" classes[].fields[].type "jsonstring" classes[].fields[].name "int_elem_map" diff --git a/config-model/src/test/derived/mlr/summary.cfg b/config-model/src/test/derived/mlr/summary.cfg index cb5bf17df84..b6a53a9a1d9 100644 --- a/config-model/src/test/derived/mlr/summary.cfg +++ b/config-model/src/test/derived/mlr/summary.cfg @@ -1,6 +1,7 @@ defaultsummaryid 1868876861 classes[].id 1868876861 classes[].name "default" +classes[].omitsummaryfeatures false classes[].fields[].name "a" classes[].fields[].type "longstring" classes[].fields[].name "b" @@ -13,6 +14,7 @@ classes[].fields[].name "documentid" classes[].fields[].type "longstring" classes[].id 1944325986 classes[].name "attributeprefetch" +classes[].omitsummaryfeatures false classes[].fields[].name "a" classes[].fields[].type "longstring" classes[].fields[].name "ranklog" diff --git a/config-model/src/test/derived/music/summary.cfg b/config-model/src/test/derived/music/summary.cfg index 3eca077dbc8..bc55727b407 100644 --- a/config-model/src/test/derived/music/summary.cfg +++ b/config-model/src/test/derived/music/summary.cfg @@ -1,6 +1,7 @@ defaultsummaryid 2086497905 classes[].id 2086497905 classes[].name "default" +classes[].omitsummaryfeatures false classes[].fields[].name "bgndata" classes[].fields[].type "longstring" classes[].fields[].name "sales" @@ -79,6 +80,7 @@ classes[].fields[].name "documentid" classes[].fields[].type "longstring" classes[].id 2060710706 classes[].name "attributeprefetch" +classes[].omitsummaryfeatures false classes[].fields[].name "sales" classes[].fields[].type "integer" classes[].fields[].name "pto" diff --git a/config-model/src/test/derived/newrank/summary.cfg b/config-model/src/test/derived/newrank/summary.cfg index 7cd92c26e02..0b98b20c342 100644 --- a/config-model/src/test/derived/newrank/summary.cfg +++ b/config-model/src/test/derived/newrank/summary.cfg @@ -1,6 +1,7 @@ defaultsummaryid 912980235 classes[].id 912980235 classes[].name "default" +classes[].omitsummaryfeatures false classes[].fields[].name "bgndata" classes[].fields[].type "longstring" classes[].fields[].name "sales" @@ -71,6 +72,7 @@ classes[].fields[].name "documentid" classes[].fields[].type "longstring" classes[].id 1606815285 classes[].name "attributeprefetch" +classes[].omitsummaryfeatures false classes[].fields[].name "sales" classes[].fields[].type "integer" classes[].fields[].name "pto" diff --git a/config-model/src/test/derived/position_nosummary/summary.cfg b/config-model/src/test/derived/position_nosummary/summary.cfg index fad012393ef..4222e88cc2f 100644 --- a/config-model/src/test/derived/position_nosummary/summary.cfg +++ b/config-model/src/test/derived/position_nosummary/summary.cfg @@ -1,6 +1,7 @@ defaultsummaryid 1727020212 classes[].id 1727020212 classes[].name "default" +classes[].omitsummaryfeatures false classes[].fields[].name "pos.position" classes[].fields[].type "xmlstring" classes[].fields[].name "pos.distance" @@ -13,6 +14,7 @@ classes[].fields[].name "documentid" classes[].fields[].type "longstring" classes[].id 1530141163 classes[].name "attributeprefetch" +classes[].omitsummaryfeatures false classes[].fields[].name "pos_zcurve" classes[].fields[].type "int64" classes[].fields[].name "rankfeatures" diff --git a/config-model/src/test/derived/position_summary/summary.cfg b/config-model/src/test/derived/position_summary/summary.cfg index af801f43cc0..f54066d865e 100644 --- a/config-model/src/test/derived/position_summary/summary.cfg +++ b/config-model/src/test/derived/position_summary/summary.cfg @@ -1,6 +1,7 @@ defaultsummaryid 230670304 classes[].id 230670304 classes[].name "default" +classes[].omitsummaryfeatures false classes[].fields[].name "pos" classes[].fields[].type "jsonstring" classes[].fields[].name "pos.position" @@ -15,6 +16,7 @@ classes[].fields[].name "documentid" classes[].fields[].type "longstring" classes[].id 1530141163 classes[].name "attributeprefetch" +classes[].omitsummaryfeatures false classes[].fields[].name "pos_zcurve" classes[].fields[].type "int64" classes[].fields[].name "rankfeatures" diff --git a/config-model/src/test/derived/predicate_attribute/summary.cfg b/config-model/src/test/derived/predicate_attribute/summary.cfg index 6e33bd4e567..9cc613107e0 100644 --- a/config-model/src/test/derived/predicate_attribute/summary.cfg +++ b/config-model/src/test/derived/predicate_attribute/summary.cfg @@ -1,6 +1,7 @@ defaultsummaryid 1391971216 classes[].id 1391971216 classes[].name "default" +classes[].omitsummaryfeatures false classes[].fields[].name "some_predicate_field" classes[].fields[].type "string" classes[].fields[].name "rankfeatures" @@ -11,6 +12,7 @@ classes[].fields[].name "documentid" classes[].fields[].type "longstring" classes[].id 1274088866 classes[].name "attributeprefetch" +classes[].omitsummaryfeatures false classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" classes[].fields[].name "summaryfeatures" diff --git a/config-model/src/test/derived/rankexpression/summary.cfg b/config-model/src/test/derived/rankexpression/summary.cfg index f8b56baf8f2..4f417a848a7 100644 --- a/config-model/src/test/derived/rankexpression/summary.cfg +++ b/config-model/src/test/derived/rankexpression/summary.cfg @@ -1,6 +1,7 @@ defaultsummaryid 1753207254 classes[].id 1753207254 classes[].name "default" +classes[].omitsummaryfeatures false classes[].fields[].name "artist" classes[].fields[].type "longstring" classes[].fields[].name "title" @@ -17,6 +18,7 @@ classes[].fields[].name "documentid" classes[].fields[].type "longstring" classes[].id 1736696699 classes[].name "attributeprefetch" +classes[].omitsummaryfeatures false classes[].fields[].name "year" classes[].fields[].type "integer" classes[].fields[].name "foo1" diff --git a/config-model/src/test/derived/ranktypes/summary.cfg b/config-model/src/test/derived/ranktypes/summary.cfg index 9644eb878ea..49b668e9edf 100644 --- a/config-model/src/test/derived/ranktypes/summary.cfg +++ b/config-model/src/test/derived/ranktypes/summary.cfg @@ -1,6 +1,7 @@ defaultsummaryid 1567556360 classes[].id 1567556360 classes[].name "default" +classes[].omitsummaryfeatures false classes[].fields[].name "title" classes[].fields[].type "longstring" classes[].fields[].name "descr" diff --git a/config-model/src/test/derived/reference_fields/summary.cfg b/config-model/src/test/derived/reference_fields/summary.cfg index 49037473d88..410bccff7b3 100644 --- a/config-model/src/test/derived/reference_fields/summary.cfg +++ b/config-model/src/test/derived/reference_fields/summary.cfg @@ -1,6 +1,7 @@ defaultsummaryid 1987541865 classes[].id 1987541865 classes[].name "default" +classes[].omitsummaryfeatures false classes[].fields[].name "campaign_ref" classes[].fields[].type "longstring" classes[].fields[].name "rankfeatures" @@ -11,6 +12,7 @@ classes[].fields[].name "documentid" classes[].fields[].type "longstring" classes[].id 428144659 classes[].name "explicit_summary" +classes[].omitsummaryfeatures false classes[].fields[].name "yet_another_ref" classes[].fields[].type "longstring" classes[].fields[].name "rankfeatures" @@ -19,6 +21,7 @@ classes[].fields[].name "summaryfeatures" classes[].fields[].type "featuredata" classes[].id 1274088866 classes[].name "attributeprefetch" +classes[].omitsummaryfeatures false classes[].fields[].name "rankfeatures" classes[].fields[].type "featuredata" classes[].fields[].name "summaryfeatures" diff --git a/config-model/src/test/derived/streamingstruct/summary.cfg b/config-model/src/test/derived/streamingstruct/summary.cfg index 28f19e6fe25..655499a88be 100644 --- a/config-model/src/test/derived/streamingstruct/summary.cfg +++ b/config-model/src/test/derived/streamingstruct/summary.cfg @@ -1,6 +1,7 @@ defaultsummaryid 569269436 classes[].id 569269436 classes[].name "default" +classes[].omitsummaryfeatures false classes[].fields[].name "coupleof" classes[].fields[].type "longstring" classes[].fields[].name "anothersummaryfield" @@ -41,6 +42,7 @@ classes[].fields[].name "documentid" classes[].fields[].type "longstring" classes[].id 109252281 classes[].name "summ" +classes[].omitsummaryfeatures false classes[].fields[].name "snippet" classes[].fields[].type "longstring" classes[].fields[].name "snippet2" diff --git a/config-model/src/test/derived/streamingstructdefault/summary.cfg b/config-model/src/test/derived/streamingstructdefault/summary.cfg index caa44931c6a..a52b34925dc 100644 --- a/config-model/src/test/derived/streamingstructdefault/summary.cfg +++ b/config-model/src/test/derived/streamingstructdefault/summary.cfg @@ -1,6 +1,7 @@ defaultsummaryid 718801936 classes[].id 718801936 classes[].name "default" +classes[].omitsummaryfeatures false classes[].fields[].name "sum1" classes[].fields[].type "longstring" classes[].fields[].name "f1" diff --git a/config-model/src/test/derived/tensor/summary.cfg b/config-model/src/test/derived/tensor/summary.cfg index fb32eacbb4c..355cba0e561 100644 --- a/config-model/src/test/derived/tensor/summary.cfg +++ b/config-model/src/test/derived/tensor/summary.cfg @@ -1,6 +1,7 @@ defaultsummaryid 898020074 classes[].id 898020074 classes[].name "default" +classes[].omitsummaryfeatures false classes[].fields[].name "f1" classes[].fields[].type "tensor" classes[].fields[].name "f3" @@ -17,6 +18,7 @@ classes[].fields[].name "documentid" classes[].fields[].type "longstring" classes[].id 1476352352 classes[].name "attributeprefetch" +classes[].omitsummaryfeatures false classes[].fields[].name "f2" classes[].fields[].type "tensor" classes[].fields[].name "f3" diff --git a/config-model/src/test/derived/types/summary.cfg b/config-model/src/test/derived/types/summary.cfg index e5485a24c8c..e0e67a5669d 100644 --- a/config-model/src/test/derived/types/summary.cfg +++ b/config-model/src/test/derived/types/summary.cfg @@ -1,6 +1,7 @@ defaultsummaryid 1131946680 classes[].id 1131946680 classes[].name "default" +classes[].omitsummaryfeatures false classes[].fields[].name "abyte" classes[].fields[].type "byte" classes[].fields[].name "along" @@ -25,6 +26,7 @@ classes[].fields[].name "documentid" classes[].fields[].type "longstring" classes[].id 1027812395 classes[].name "attributeprefetch" +classes[].omitsummaryfeatures false classes[].fields[].name "other" classes[].fields[].type "int64" classes[].fields[].name "abyte" diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/derived/SummaryTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/derived/SummaryTestCase.java index bfc738a4f87..ef7da4f23d0 100644 --- a/config-model/src/test/java/com/yahoo/searchdefinition/derived/SummaryTestCase.java +++ b/config-model/src/test/java/com/yahoo/searchdefinition/derived/SummaryTestCase.java @@ -6,6 +6,7 @@ import com.yahoo.searchdefinition.Search; import com.yahoo.searchdefinition.SearchBuilder; import com.yahoo.searchdefinition.SchemaTestCase; import com.yahoo.searchdefinition.parser.ParseException; +import com.yahoo.vespa.config.search.SummaryConfig; import org.junit.Test; import java.io.IOException; @@ -14,6 +15,7 @@ import java.util.Iterator; import static com.yahoo.config.model.test.TestUtil.joinLines; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; /** * Tests summary extraction @@ -151,4 +153,30 @@ public class SummaryTestCase extends SchemaTestCase { return builder.getSearch("ad"); } + @Test + public void omit_summary_features_specified_for_document_summary() throws ParseException { + String sd = joinLines( + "schema test {", + " document test {", + " field foo type string { indexing: summary }", + " }", + " document-summary bar {", + " summary foo type string {}", + " omit-summary-features", + " }", + " document-summary baz {", + " summary foo type string {}", + " }", + "}"); + var search = SearchBuilder.createFromString(sd).getSearch(); + assertOmitSummaryFeatures(true, search, "bar"); + assertOmitSummaryFeatures(false, search, "baz"); + } + + private void assertOmitSummaryFeatures(boolean expected, Search search, String summaryName) { + var summary = new SummaryClass(search, search.getSummary(summaryName), new BaseDeployLogger()); + var config = new SummaryConfig.Classes(summary.getSummaryClassConfig()); + assertEquals(expected, config.omitsummaryfeatures()); + } + } diff --git a/configdefinitions/src/vespa/summary.def b/configdefinitions/src/vespa/summary.def index 20ca6b10450..26b0e4a4a37 100644 --- a/configdefinitions/src/vespa/summary.def +++ b/configdefinitions/src/vespa/summary.def @@ -4,5 +4,6 @@ namespace=vespa.config.search defaultsummaryid int default=-1 classes[].id int classes[].name string +classes[].omitsummaryfeatures bool default=false classes[].fields[].name string classes[].fields[].type string diff --git a/searchcore/src/vespa/searchcore/proton/docsummary/docsumcontext.cpp b/searchcore/src/vespa/searchcore/proton/docsummary/docsumcontext.cpp index c0b5bcab791..b8d1d2f17e6 100644 --- a/searchcore/src/vespa/searchcore/proton/docsummary/docsumcontext.cpp +++ b/searchcore/src/vespa/searchcore/proton/docsummary/docsumcontext.cpp @@ -71,6 +71,7 @@ DocsumContext::createReply() reply->docsums.resize(_docsumState._docsumcnt); SymbolTable::UP symbols = std::make_unique<SymbolTable>(); IDocsumWriter::ResolveClassInfo rci = _docsumWriter.resolveClassInfo(_docsumState._args.getResultClassName(), _docsumStore.getSummaryClassId()); + _docsumState._omit_summary_features = rci.outputClass->omit_summary_features(); for (uint32_t i = 0; i < _docsumState._docsumcnt; ++i) { buf.reset(); uint32_t docId = _docsumState._docsumbuf[i]; @@ -114,6 +115,7 @@ DocsumContext::createSlimeReply() const Symbol docsumSym = response->insert(DOCSUM); IDocsumWriter::ResolveClassInfo rci = _docsumWriter.resolveClassInfo(_docsumState._args.getResultClassName(), _docsumStore.getSummaryClassId()); + _docsumState._omit_summary_features = rci.outputClass->omit_summary_features(); uint32_t i(0); for (i = 0; (i < _docsumState._docsumcnt) && !_request.expired(); ++i) { uint32_t docId = _docsumState._docsumbuf[i]; diff --git a/searchsummary/src/vespa/searchsummary/docsummary/docsumstate.cpp b/searchsummary/src/vespa/searchsummary/docsummary/docsumstate.cpp index 99a372d9676..6f042ee3907 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/docsumstate.cpp +++ b/searchsummary/src/vespa/searchsummary/docsummary/docsumstate.cpp @@ -36,6 +36,7 @@ GetDocsumsState::GetDocsumsState(GetDocsumsStateCallback &callback) _parsedLocations(), _summaryFeatures(nullptr), _summaryFeaturesCached(false), + _omit_summary_features(false), _rankFeatures(nullptr), _matching_elements(), _jsonStringer() diff --git a/searchsummary/src/vespa/searchsummary/docsummary/docsumstate.h b/searchsummary/src/vespa/searchsummary/docsummary/docsumstate.h index db0f8e6e8ad..88a95d0446c 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/docsumstate.h +++ b/searchsummary/src/vespa/searchsummary/docsummary/docsumstate.h @@ -84,6 +84,7 @@ public: // used by SummaryFeaturesDFW FeatureSet::SP _summaryFeatures; bool _summaryFeaturesCached; + bool _omit_summary_features; // used by RankFeaturesDFW FeatureSet::SP _rankFeatures; diff --git a/searchsummary/src/vespa/searchsummary/docsummary/resultclass.cpp b/searchsummary/src/vespa/searchsummary/docsummary/resultclass.cpp index 8066a5e65db..f52cc62af92 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/resultclass.cpp +++ b/searchsummary/src/vespa/searchsummary/docsummary/resultclass.cpp @@ -15,7 +15,8 @@ ResultClass::ResultClass(const char *name, uint32_t id, util::StringEnum & field _nameMap(), _fieldEnum(fieldEnum), _enumMap(), - _dynInfo(NULL) + _dynInfo(NULL), + _omit_summary_features(false) { } diff --git a/searchsummary/src/vespa/searchsummary/docsummary/resultclass.h b/searchsummary/src/vespa/searchsummary/docsummary/resultclass.h index 52e331cd365..88c3552387b 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/resultclass.h +++ b/searchsummary/src/vespa/searchsummary/docsummary/resultclass.h @@ -141,6 +141,9 @@ private: util::StringEnum &_fieldEnum; // fieldname -> f.n. enum value [SHARED] std::vector<int> _enumMap; // fieldname enum value -> entry index DynamicInfo *_dynInfo; // fields overridden and generated + // Whether or not summary features should be omitted when filling this summary class. + // As default, summary features are always included. + bool _omit_summary_features; public: typedef std::unique_ptr<ResultClass> UP; @@ -278,6 +281,14 @@ public: { return (offset < _entries.size()) ? &_entries[offset] : NULL; } + + void set_omit_summary_features(bool value) { + _omit_summary_features = value; + } + + bool omit_summary_features() const { + return _omit_summary_features; + } }; } diff --git a/searchsummary/src/vespa/searchsummary/docsummary/resultconfig.cpp b/searchsummary/src/vespa/searchsummary/docsummary/resultconfig.cpp index ead3a4a2f9d..579779efb73 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/resultconfig.cpp +++ b/searchsummary/src/vespa/searchsummary/docsummary/resultconfig.cpp @@ -127,25 +127,27 @@ ResultConfig::ReadConfig(const vespa::config::search::SummaryConfig &cfg, const int maxclassID = 0x7fffffff; // avoid negative classids _defaultSummaryId = cfg.defaultsummaryid; for (uint32_t i = 0; rc && i < cfg.classes.size(); i++) { - if (cfg.classes[i].name.empty()) { + const auto& cfg_class = cfg.classes[i]; + if (cfg_class.name.empty()) { LOG(warning, "%s classes[%d]: empty name", configId, i); } - int classID = cfg.classes[i].id; + int classID = cfg_class.id; if (classID < 0 || classID > maxclassID) { LOG(error, "%s classes[%d]: bad id %d", configId, i, classID); rc = false; break; } - ResultClass *resClass = AddResultClass(cfg.classes[i].name.c_str(), classID); + ResultClass *resClass = AddResultClass(cfg_class.name.c_str(), classID); if (resClass == nullptr) { - LOG(error,"%s: unable to add classes[%d] name %s", configId, i, cfg.classes[i].name.c_str()); + LOG(error,"%s: unable to add classes[%d] name %s", configId, i, cfg_class.name.c_str()); rc = false; break; } - for (unsigned int j = 0; rc && (j < cfg.classes[i].fields.size()); j++) { - const char *fieldtype = cfg.classes[i].fields[j].type.c_str(); - const char *fieldname = cfg.classes[i].fields[j].name.c_str(); - LOG(debug, "Reconfiguring class '%s' field '%s' of type '%s'", cfg.classes[i].name.c_str(), fieldname, fieldtype); + resClass->set_omit_summary_features(cfg_class.omitsummaryfeatures); + for (unsigned int j = 0; rc && (j < cfg_class.fields.size()); j++) { + const char *fieldtype = cfg_class.fields[j].type.c_str(); + const char *fieldname = cfg_class.fields[j].name.c_str(); + LOG(debug, "Reconfiguring class '%s' field '%s' of type '%s'", cfg_class.name.c_str(), fieldname, fieldtype); if (strcmp(fieldtype, "integer") == 0) { rc = resClass->AddConfigEntry(fieldname, RES_INT); } else if (strcmp(fieldtype, "short") == 0) { @@ -179,12 +181,12 @@ ResultConfig::ReadConfig(const vespa::config::search::SummaryConfig &cfg, const } else if (strcmp(fieldtype, "featuredata") == 0) { rc = resClass->AddConfigEntry(fieldname, RES_FEATUREDATA); } else { - LOG(error, "%s %s.fields[%d]: unknown type '%s'", configId, cfg.classes[i].name.c_str(), j, fieldtype); + LOG(error, "%s %s.fields[%d]: unknown type '%s'", configId, cfg_class.name.c_str(), j, fieldtype); rc = false; break; } if (!rc) { - LOG(error, "%s %s.fields[%d]: duplicate name '%s'", configId, cfg.classes[i].name.c_str(), j, fieldname); + LOG(error, "%s %s.fields[%d]: duplicate name '%s'", configId, cfg_class.name.c_str(), j, fieldname); break; } } diff --git a/searchsummary/src/vespa/searchsummary/docsummary/summaryfeaturesdfw.cpp b/searchsummary/src/vespa/searchsummary/docsummary/summaryfeaturesdfw.cpp index 425faff6a67..4d81f4505a7 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/summaryfeaturesdfw.cpp +++ b/searchsummary/src/vespa/searchsummary/docsummary/summaryfeaturesdfw.cpp @@ -30,6 +30,9 @@ static vespalib::Memory _M_cached("vespa.summaryFeatures.cached"); void SummaryFeaturesDFW::insertField(uint32_t docid, GetDocsumsState *state, ResType type, vespalib::slime::Inserter &target) { + if (state->_omit_summary_features) { + return; + } if ( ! state->_summaryFeatures) { state->_callback.FillSummaryFeatures(state, _env); if ( !state->_summaryFeatures) { // still no summary features to write |