diff options
author | Tor Egge <Tor.Egge@broadpark.no> | 2019-01-10 15:33:47 +0100 |
---|---|---|
committer | Tor Egge <Tor.Egge@broadpark.no> | 2019-01-11 11:18:03 +0100 |
commit | 714931304b90a3438c4b048f5b4f94119dac2b23 (patch) | |
tree | d4abe5a03366e85274bb3179a976d0405d419c5f /config-model/src/main/java/com/yahoo/searchdefinition/processing | |
parent | 0719167b1ebdc03e79156dafded27edee3daa852 (diff) |
Stop flattening imported fields.
Diffstat (limited to 'config-model/src/main/java/com/yahoo/searchdefinition/processing')
4 files changed, 27 insertions, 35 deletions
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/AddAttributeTransformToSummaryOfImportedFields.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/AddAttributeTransformToSummaryOfImportedFields.java index 6a1275a73d9..59dc4275e15 100644 --- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/AddAttributeTransformToSummaryOfImportedFields.java +++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/AddAttributeTransformToSummaryOfImportedFields.java @@ -4,7 +4,9 @@ package com.yahoo.searchdefinition.processing; import com.yahoo.config.application.api.DeployLogger; import com.yahoo.searchdefinition.RankProfileRegistry; import com.yahoo.searchdefinition.Search; +import com.yahoo.searchdefinition.document.ImmutableImportedComplexSDField; import com.yahoo.searchdefinition.document.ImmutableSDField; +import com.yahoo.searchdefinition.document.ImportedComplexField; import com.yahoo.vespa.documentmodel.SummaryField; import com.yahoo.vespa.documentmodel.SummaryTransform; import com.yahoo.vespa.model.container.search.QueryProfiles; @@ -30,19 +32,21 @@ public class AddAttributeTransformToSummaryOfImportedFields extends Processor { @Override public void process(boolean validate, boolean documentsOnly) { search.allImportedFields() - .flatMap(this::getSummaryFieldsForImportedField) - .forEach(AddAttributeTransformToSummaryOfImportedFields::setAttributeTransform); - search.importedFields().map(fields -> fields.complexFields().values().stream()). - orElse(Stream.empty()). - map(field -> field.asImmutableSDField()). - flatMap(this::getSummaryFieldsForImportedField). - forEach(AddAttributeTransformToSummaryOfImportedFields::setAttributeCombinerTransform); + .forEach(field -> setTransform(field)); } private Stream<SummaryField> getSummaryFieldsForImportedField(ImmutableSDField importedField) { return search.getSummaryFields(importedField).values().stream(); } + private void setTransform(ImmutableSDField field) { + if (field instanceof ImmutableImportedComplexSDField) { + getSummaryFieldsForImportedField(field).forEach(AddAttributeTransformToSummaryOfImportedFields::setAttributeCombinerTransform); + } else { + getSummaryFieldsForImportedField(field).forEach(AddAttributeTransformToSummaryOfImportedFields::setAttributeTransform); + } + } + private static void setAttributeTransform(SummaryField summaryField) { if (summaryField.getTransform() == SummaryTransform.NONE) { summaryField.setTransform(SummaryTransform.ATTRIBUTE); diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/AdjustPositionSummaryFields.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/AdjustPositionSummaryFields.java index 9f8ac9230b8..e59fcdf3dd0 100644 --- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/AdjustPositionSummaryFields.java +++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/AdjustPositionSummaryFields.java @@ -42,7 +42,7 @@ public class AdjustPositionSummaryFields extends Processor { if (isPositionDataType(summaryField.getDataType())) { String originalSource = summaryField.getSingleSource(); if (originalSource.indexOf('.') == -1) { // Eliminate summary fields with pos.x or pos.y as source - ImmutableSDField sourceField = getSourceField(originalSource); + ImmutableSDField sourceField = search.getField(originalSource); if (sourceField != null) { String zCurve = null; if (sourceField.getDataType().equals(summaryField.getDataType())) { @@ -95,17 +95,6 @@ public class AdjustPositionSummaryFields extends Processor { summary.add(oldField); } - private ImmutableSDField getSourceField(String name) { - ImmutableSDField field = search.getField(name); - if (field == null && search.importedFields().isPresent()) { - ImportedField importedField = search.importedFields().get().complexFields().get(name); - if (importedField != null) { - field = importedField.asImmutableSDField(); - } - } - return field; - } - private boolean hasPositionAttribute(String name) { Attribute attribute = search.getAttribute(name); if (attribute == null) { diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/ImportedFieldsResolver.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/ImportedFieldsResolver.java index 04abc8a421a..d6c334ee80b 100644 --- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/ImportedFieldsResolver.java +++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/ImportedFieldsResolver.java @@ -33,7 +33,6 @@ import static com.yahoo.searchdefinition.document.ComplexAttributeFieldUtils.isM public class ImportedFieldsResolver extends Processor { private final Map<String, ImportedField> importedFields = new LinkedHashMap<>(); - private final Map<String, ImportedField> importedComplexFields = new LinkedHashMap<>(); private final Optional<DocumentReferences> references; public ImportedFieldsResolver(Search search, DeployLogger deployLogger, RankProfileRegistry rankProfileRegistry, QueryProfiles queryProfiles) { @@ -44,7 +43,7 @@ public class ImportedFieldsResolver extends Processor { @Override public void process(boolean validate, boolean documentsOnly) { search.temporaryImportedFields().get().fields().forEach((name, field) -> resolveImportedField(field, validate)); - search.setImportedFields(new ImportedFields(importedFields, importedComplexFields)); + search.setImportedFields(new ImportedFields(importedFields)); } private void resolveImportedField(TemporaryImportedField importedField, boolean validate) { @@ -71,14 +70,14 @@ public class ImportedFieldsResolver extends Processor { ImmutableSDField targetZCurveField = getTargetField(importedZCurveField, reference); resolveImportedNormalField(importedZCurveField, reference, targetZCurveField, validate); ImportedComplexField importedStructField = new ImportedComplexField(importedField.fieldName(), reference, targetField); - registerImportedComplexField(importedStructField); + registerImportedField(importedField, null, importedStructField); } private void resolveImportedArrayOfStructField(TemporaryImportedField importedField, DocumentReference reference, ImmutableSDField targetField, boolean validate) { ImportedComplexField importedStructField = new ImportedComplexField(importedField.fieldName(), reference, targetField); resolveImportedNestedStructField(importedField, reference, importedStructField, targetField, validate); - registerImportedComplexField(importedStructField); + registerImportedField(importedField, null, importedStructField); } private void resolveImportedMapOfStructField(TemporaryImportedField importedField, DocumentReference reference, @@ -88,22 +87,23 @@ public class ImportedFieldsResolver extends Processor { importedMapField.addNestedField(importedStructField); resolveImportedNestedField(importedField, reference, importedMapField, targetField.getStructField("key"), validate); resolveImportedNestedStructField(importedField, reference, importedStructField, importedStructField.targetField(), validate); - registerImportedComplexField(importedMapField); + registerImportedField(importedField, null, importedMapField); } private void makeImportedNormalField(TemporaryImportedField importedField, ImportedComplexField owner, String name, DocumentReference reference, ImmutableSDField targetField) { - if (importedFields.get(name) != null) { - fail(importedField, name, targetFieldAsString(targetField.getName(), reference) +": Field already imported"); - } ImportedField importedSimpleField = new ImportedSimpleField(name, reference, targetField); - importedFields.put(name, importedSimpleField); - if (owner != null) { - owner.addNestedField(importedSimpleField); - } + registerImportedField(importedField, owner, importedSimpleField); } - private void registerImportedComplexField(ImportedComplexField importedComplexField) { - importedComplexFields.put(importedComplexField.fieldName(), importedComplexField);; + private void registerImportedField(TemporaryImportedField temporaryImportedField, ImportedComplexField owner, ImportedField importedField) { + if (owner != null) { + owner.addNestedField(importedField); + } else { + if (importedFields.get(importedField.fieldName()) != null) { + fail(temporaryImportedField, importedField.fieldName(), targetFieldAsString(importedField.targetField().getName(), importedField.reference()) + ": Field already imported"); + } + importedFields.put(importedField.fieldName(), importedField); + } } private static String makeImportedNestedFieldName(TemporaryImportedField importedField, ImmutableSDField targetNestedField) { @@ -143,7 +143,7 @@ public class ImportedFieldsResolver extends Processor { ImportedComplexField importedMapField = new ImportedComplexField(importedField.fieldName(), reference, targetField); resolveImportedNestedField(importedField, reference, importedMapField, targetField.getStructField("key"), validate); resolveImportedNestedField(importedField, reference, importedMapField, targetField.getStructField("value"), validate); - registerImportedComplexField(importedMapField); + registerImportedField(importedField, null, importedMapField); } private void resolveImportedNormalField(TemporaryImportedField importedField, DocumentReference reference, 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 008b3182d8f..c87801685bb 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 @@ -51,7 +51,6 @@ public class SummaryFieldsMustHaveValidSource extends Processor { return isDocumentField(source) || (isNotInThisSummaryClass(summary, source) && isSummaryField(source)) || (isInThisSummaryClass(summary, source) && !source.equals(summaryField.getName())) || - (search.importedFields().map(fields -> fields.complexFields().get(source) != null).orElse(false)) || (SummaryClass.DOCUMENT_ID_FIELD.equals(source)); } |