diff options
author | Bjørn Christian Seime <bjorncs@yahoo-inc.com> | 2017-03-29 13:04:18 +0200 |
---|---|---|
committer | Bjørn Christian Seime <bjorncs@yahoo-inc.com> | 2017-04-03 11:20:28 +0200 |
commit | 2b6924ad487df4ade66bf4560280b3a8d3d006d4 (patch) | |
tree | bcebd4ba272232a9ce19f53d1b87a8e94218c75b /config-model | |
parent | 124bd9621af39329d2dcc3dcb1009cd9a8ed6595 (diff) |
Allow any document field as source for summary field
Diffstat (limited to 'config-model')
3 files changed, 12 insertions, 8 deletions
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/AddExtraFieldsToDocument.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/AddExtraFieldsToDocument.java index 091bf662460..9588c08439b 100644 --- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/AddExtraFieldsToDocument.java +++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/AddExtraFieldsToDocument.java @@ -8,6 +8,7 @@ import com.yahoo.document.Field; import com.yahoo.document.PositionDataType; import com.yahoo.searchdefinition.Search; import com.yahoo.searchdefinition.document.Attribute; +import com.yahoo.searchdefinition.document.ImmutableSDField; import com.yahoo.searchdefinition.document.SDDocumentType; import com.yahoo.searchdefinition.document.SDField; import com.yahoo.vespa.documentmodel.SummaryField; @@ -58,12 +59,14 @@ public class AddExtraFieldsToDocument extends Processor { private void addSummaryField(Search search, SDDocumentType document, SummaryField field) { Field docField = document.getField(field.getName()); if (docField == null) { - SDField newField = search.getConcreteField(field.getName()); - if (newField == null) { - newField = new SDField(document, field.getName(), field.getDataType(), field.isHeader(), true); + ImmutableSDField existingField = search.getField(field.getName()); + if (existingField == null) { + SDField newField = new SDField(document, field.getName(), field.getDataType(), field.isHeader(), true); newField.setIsExtraField(true); + document.addField(newField); + } else if (!existingField.isImportedField()) { + document.addField(existingField.asField()); } - document.addField(newField); } else if (!docField.getDataType().equals(field.getDataType())) { throw newProcessException(search, field, "Summary field has conflicting type."); } diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/Processing.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/Processing.java index 0f6ed328ea9..f725113f5ab 100644 --- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/Processing.java +++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/Processing.java @@ -41,6 +41,7 @@ public class Processing { CreatePositionZCurve::new, WordMatch::new, DeprecateAttributePrefetch::new, + ImportedFieldsResolver::new, ImplicitSummaries::new, ImplicitSummaryFields::new, SummaryConsistency::new, @@ -63,7 +64,6 @@ public class Processing { ValidateFieldTypes::new, DisallowComplexMapAndWsetKeyTypes::new, SortingSettings::new, - ImportedFieldsResolver::new, FieldSetValidity::new, AddExtraFieldsToDocument::new, PredicateProcessor::new, diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/SummaryFieldsMustHaveValidSource.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/SummaryFieldsMustHaveValidSource.java index 0dacb3064ec..ce1fe9e951e 100644 --- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/SummaryFieldsMustHaveValidSource.java +++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/SummaryFieldsMustHaveValidSource.java @@ -57,14 +57,15 @@ public class SummaryFieldsMustHaveValidSource extends Processor { } } - private boolean isNotInThisSummaryClass(DocumentSummary summary, String name) { + private static boolean isNotInThisSummaryClass(DocumentSummary summary, String name) { return summary.getSummaryField(name) == null; } - private boolean isInThisSummaryClass(DocumentSummary summary, String name) { + + private static boolean isInThisSummaryClass(DocumentSummary summary, String name) { return summary.getSummaryField(name) != null; } private boolean isDocumentField(String name) { - return search.getConcreteField(name) != null; + return search.getField(name) != null; } private boolean isSummaryField(String name) { |