diff options
Diffstat (limited to 'config-model')
17 files changed, 67 insertions, 67 deletions
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/Schema.java b/config-model/src/main/java/com/yahoo/searchdefinition/Schema.java index b2d4f0592fe..36d4ba9699e 100644 --- a/config-model/src/main/java/com/yahoo/searchdefinition/Schema.java +++ b/config-model/src/main/java/com/yahoo/searchdefinition/Schema.java @@ -609,7 +609,7 @@ public class Schema implements ImmutableSchema { Map<String, SummaryField> summaryFields = inherited.isPresent() ? requireInherited().getSummaryFields(field) : new java.util.LinkedHashMap<>(); for (DocumentSummary documentSummary : summaries.values()) { - for (SummaryField summaryField : documentSummary.getSummaryFields()) { + for (SummaryField summaryField : documentSummary.getSummaryFields().values()) { if (summaryField.hasSource(field.getName())) { summaryFields.put(summaryField.getName(), summaryField); } @@ -628,7 +628,7 @@ public class Schema implements ImmutableSchema { Map<String, SummaryField> summaryFields = inherited.isPresent() ? requireInherited().getUniqueNamedSummaryFields() : new java.util.LinkedHashMap<>(); for (DocumentSummary documentSummary : summaries.values()) { - for (SummaryField summaryField : documentSummary.getSummaryFields()) { + for (SummaryField summaryField : documentSummary.getSummaryFields().values()) { summaryFields.put(summaryField.getName(), summaryField); } } 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 5f88ddba5f5..68966d39d7d 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 @@ -63,7 +63,7 @@ public class SummaryClass extends Derived { } private void deriveFields(Schema schema, DocumentSummary summary) { - for (SummaryField summaryField : summary.getSummaryFields()) { + for (SummaryField summaryField : summary.getSummaryFields().values()) { if (!accessingDiskSummary && schema.isAccessingDiskSummary(summaryField)) { accessingDiskSummary = true; } diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/derived/SummaryMap.java b/config-model/src/main/java/com/yahoo/searchdefinition/derived/SummaryMap.java index cf182a1afbc..c65ed7dc762 100644 --- a/config-model/src/main/java/com/yahoo/searchdefinition/derived/SummaryMap.java +++ b/config-model/src/main/java/com/yahoo/searchdefinition/derived/SummaryMap.java @@ -39,7 +39,7 @@ public class SummaryMap extends Derived implements SummarymapConfig.Producer { } private void derive(DocumentSummary documentSummary) { - for (SummaryField summaryField : documentSummary.getSummaryFields()) { + for (SummaryField summaryField : documentSummary.getSummaryFields().values()) { if (summaryField.getTransform()== SummaryTransform.NONE) continue; if (summaryField.getTransform()==SummaryTransform.ATTRIBUTE || diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/derived/VsmSummary.java b/config-model/src/main/java/com/yahoo/searchdefinition/derived/VsmSummary.java index a2c90bc92f5..4ce486e13ba 100644 --- a/config-model/src/main/java/com/yahoo/searchdefinition/derived/VsmSummary.java +++ b/config-model/src/main/java/com/yahoo/searchdefinition/derived/VsmSummary.java @@ -18,7 +18,7 @@ import java.util.*; */ public class VsmSummary extends Derived implements VsmsummaryConfig.Producer { - private Map<SummaryField, List<String>> summaryMap = new java.util.LinkedHashMap<>(1); + private final Map<SummaryField, List<String>> summaryMap = new java.util.LinkedHashMap<>(1); public VsmSummary(Schema schema) { derive(schema); @@ -31,8 +31,8 @@ public class VsmSummary extends Derived implements VsmsummaryConfig.Producer { } private void derive(Schema schema, DocumentSummary documentSummary) { - if (documentSummary==null) return; - for (SummaryField summaryField : documentSummary.getSummaryFields()) { + if (documentSummary == null) return; + for (SummaryField summaryField : documentSummary.getSummaryFields().values()) { List<String> from = toStringList(summaryField.sourceIterator()); if (doMapField(schema, summaryField)) { 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 9ade1786e37..57d5a9c8e75 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 @@ -39,7 +39,7 @@ public class AddExtraFieldsToDocument extends Processor { addSdField(schema, document, field, validate); } //TODO Vespa 8 or sooner we should avoid the dirty addition of fields from dirty 'default' summary to document at all - for (SummaryField field : schema.getSummary("default").getSummaryFields()) { + for (SummaryField field : schema.getSummary("default").getSummaryFields().values()) { if (dirtyLegalFieldNameCheck(field.getName())) { addSummaryField(schema, document, field, validate); } 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 176fcf2130f..983942f87c3 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 @@ -33,26 +33,26 @@ public class AdjustPositionSummaryFields extends Processor { } private void scanSummary(DocumentSummary summary) { - for (SummaryField summaryField : summary.getSummaryFields()) { - 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 = schema.getField(originalSource); - if (sourceField != null) { - String zCurve = null; - if (sourceField.getDataType().equals(summaryField.getDataType())) { - zCurve = PositionDataType.getZCurveFieldName(originalSource); - } else if (sourceField.getDataType().equals(makeZCurveDataType(summaryField.getDataType())) && - hasZCurveSuffix(originalSource)) { - zCurve = originalSource; - } - if (zCurve != null) { - if (hasPositionAttribute(zCurve)) { - Source source = new Source(zCurve); - adjustPositionField(summary, summaryField, source); - } else if (sourceField.isImportedField() || !summaryField.getName().equals(originalSource)) { - fail(summaryField, "No position attribute '" + zCurve + "'"); - } + for (SummaryField summaryField : summary.getSummaryFields().values()) { + if ( ! isPositionDataType(summaryField.getDataType())) continue; + + String originalSource = summaryField.getSingleSource(); + if (originalSource.indexOf('.') == -1) { // Eliminate summary fields with pos.x or pos.y as source + ImmutableSDField sourceField = schema.getField(originalSource); + if (sourceField != null) { + String zCurve = null; + if (sourceField.getDataType().equals(summaryField.getDataType())) { + zCurve = PositionDataType.getZCurveFieldName(originalSource); + } else if (sourceField.getDataType().equals(makeZCurveDataType(summaryField.getDataType())) && + hasZCurveSuffix(originalSource)) { + zCurve = originalSource; + } + if (zCurve != null) { + if (hasPositionAttribute(zCurve)) { + Source source = new Source(zCurve); + adjustPositionField(summary, summaryField, source); + } else if (sourceField.isImportedField() || !summaryField.getName().equals(originalSource)) { + fail(summaryField, "No position attribute '" + zCurve + "'"); } } } diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/ImplicitSummaryFields.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/ImplicitSummaryFields.java index ff0a0d07102..e11f7d370c5 100644 --- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/ImplicitSummaryFields.java +++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/ImplicitSummaryFields.java @@ -23,7 +23,7 @@ public class ImplicitSummaryFields extends Processor { @Override public void process(boolean validate, boolean documentsOnly) { for (DocumentSummary docsum : schema.getSummariesInThis().values()) { - if (docsum.getInherited() != null) continue; // Implicit fields are added to inheriting summaries through their parent + if (docsum.inherited().isPresent()) continue; // Implicit fields are added to inheriting summaries through their parent addField(docsum, new SummaryField("rankfeatures", DataType.STRING, SummaryTransform.RANKFEATURES), validate); addField(docsum, new SummaryField("summaryfeatures", DataType.STRING, SummaryTransform.SUMMARYFEATURES), validate); } diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/MatchedElementsOnlyResolver.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/MatchedElementsOnlyResolver.java index 709c79cd79b..c2fe4e875b8 100644 --- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/MatchedElementsOnlyResolver.java +++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/MatchedElementsOnlyResolver.java @@ -33,8 +33,8 @@ public class MatchedElementsOnlyResolver extends Processor { public void process(boolean validate, boolean documentsOnly) { for (var entry : schema.getSummaries().entrySet()) { var summary = entry.getValue(); - for (var field : summary.getSummaryFields()) { - if (field.getTransform().equals(SummaryTransform.MATCHED_ELEMENTS_FILTER)) { + for (var field : summary.getSummaryFields().values()) { + if (field.getTransform() == SummaryTransform.MATCHED_ELEMENTS_FILTER) { processSummaryField(summary, field, validate); } } diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/ReferenceFieldsProcessor.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/ReferenceFieldsProcessor.java index ed23b1ca606..19bfb41289d 100644 --- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/ReferenceFieldsProcessor.java +++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/ReferenceFieldsProcessor.java @@ -35,7 +35,7 @@ public class ReferenceFieldsProcessor extends Processor { private void clearSummaryAttributeAspectForExplicitSummaryFields() { for (DocumentSummary docSum : schema.getSummaries().values()) { - docSum.getSummaryFields().stream() + docSum.getSummaryFields().values().stream() .filter(summaryField -> summaryField.getDataType() instanceof ReferenceDataType) .forEach(summaryField -> summaryField.setTransform(SummaryTransform.NONE)); } diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/SummaryConsistency.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/SummaryConsistency.java index 80f9a15f1e5..8b86674e4d0 100644 --- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/SummaryConsistency.java +++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/SummaryConsistency.java @@ -33,7 +33,7 @@ public class SummaryConsistency extends Processor { for (DocumentSummary summary : schema.getSummaries().values()) { if (summary.getName().equals("default")) continue; - for (SummaryField summaryField : summary.getSummaryFields() ) { + for (SummaryField summaryField : summary.getSummaryFields().values()) { assertConsistency(summaryField, schema, validate); makeAttributeTransformIfAppropriate(summaryField, schema); makeAttributeCombinerTransformIfAppropriate(summaryField, schema); diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/SummaryDiskAccessValidator.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/SummaryDiskAccessValidator.java index 4bc553b1669..6a64202686f 100644 --- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/SummaryDiskAccessValidator.java +++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/SummaryDiskAccessValidator.java @@ -37,7 +37,7 @@ public class SummaryDiskAccessValidator extends Processor { if (documentsOnly) return; for (DocumentSummary summary : schema.getSummaries().values()) { - for (SummaryField summaryField : summary.getSummaryFields()) { + for (SummaryField summaryField : summary.getSummaryFields().values()) { for (SummaryField.Source source : summaryField.getSources()) { ImmutableSDField field = schema.getField(source.getName()); if (field == null) @@ -47,9 +47,9 @@ public class SummaryDiskAccessValidator extends Processor { source + ", but this field does not exist"); if ( ! isInMemory(field, summaryField) && ! summary.isFromDisk()) { deployLogger.logApplicationPackage(Level.WARNING, summaryField + " in " + summary + " references " + - source + ", which is not an attribute: Using this " + - "summary will cause disk accesses. " + - "Set 'from-disk' on this summary class to silence this warning."); + source + ", which is not an attribute: Using this " + + "summary will cause disk accesses. " + + "Set 'from-disk' on this summary class to silence this warning."); } } } 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 2e2144b819d..c6f5b35aaa8 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 @@ -26,7 +26,7 @@ public class SummaryFieldsMustHaveValidSource extends Processor { if ( ! validate) return; for (DocumentSummary summary : schema.getSummaries().values()) { - for (SummaryField summaryField : summary.getSummaryFields()) { + for (SummaryField summaryField : summary.getSummaryFields().values()) { if (summaryField.getSources().isEmpty()) { if ((summaryField.getTransform() != SummaryTransform.RANKFEATURES) && (summaryField.getTransform() != SummaryTransform.SUMMARYFEATURES)) diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/SummaryNamesFieldCollisions.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/SummaryNamesFieldCollisions.java index 1c6f8d54ea3..2d0afe88281 100644 --- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/SummaryNamesFieldCollisions.java +++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/SummaryNamesFieldCollisions.java @@ -32,7 +32,7 @@ public class SummaryNamesFieldCollisions extends Processor { Map<String, Pair<String, String>> fieldToClassAndSource = new HashMap<>(); for (DocumentSummary summary : schema.getSummaries().values()) { if ("default".equals(summary.getName())) continue; - for (SummaryField summaryField : summary.getSummaryFields() ) { + for (SummaryField summaryField : summary.getSummaryFields().values()) { if (summaryField.isImplicit()) continue; Pair<String, String> prevClassAndSource = fieldToClassAndSource.get(summaryField.getName()); for (Source source : summaryField.getSources()) { diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/ValidateFieldTypes.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/ValidateFieldTypes.java index 0d4bfd09677..68bf2511a4b 100644 --- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/ValidateFieldTypes.java +++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/ValidateFieldTypes.java @@ -48,7 +48,7 @@ public class ValidateFieldTypes extends Processor { } final protected void verifySummaryFields(String searchName, Map<String, DataType> seenFields) { for (DocumentSummary summary : schema.getSummaries().values()) { - for (SummaryField field : summary.getSummaryFields()) { + for (SummaryField field : summary.getSummaryFields().values()) { checkFieldType(searchName, "summary field", field.getName(), field.getDataType(), seenFields); } } 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 967e662dc6b..3dda498b0be 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 @@ -6,8 +6,12 @@ import com.yahoo.searchdefinition.Schema; import java.util.ArrayList; import java.util.Collection; +import java.util.HashMap; import java.util.Iterator; +import java.util.LinkedHashMap; import java.util.List; +import java.util.Map; +import java.util.Optional; import java.util.logging.Level; /** @@ -19,7 +23,7 @@ public class DocumentSummary extends FieldView { private boolean fromDisk = false; private boolean omitSummaryFeatures = false; - private String inherited; + private Optional<String> inherited = Optional.empty(); private final Schema owner; @@ -57,20 +61,15 @@ public class DocumentSummary extends FieldView { public SummaryField getSummaryField(String name) { var field = (SummaryField)get(name); if (field != null) return field; - if (getInherited() == null) return null; - return getInherited().getSummaryField(name); + if (inherited().isEmpty()) return null; + return inherited().get().getSummaryField(name); } - // TODO: This does not handle overriding in child summaries correctly - public Collection<SummaryField> getSummaryFields() { - var fields = new ArrayList<SummaryField>(getFields().size()); - var parent = getInherited(); - if (parent != null) { - fields.addAll(parent.getSummaryFields()); - } - for (var field : getFields()) { - fields.add((SummaryField) field); - } + public Map<String, SummaryField> getSummaryFields() { + var fields = new LinkedHashMap<String, SummaryField>(getFields().size()); + inherited().ifPresent(inherited -> fields.putAll(inherited.getSummaryFields())); + for (var field : getFields()) + fields.put(field.getName(), (SummaryField) field); return fields; } @@ -83,7 +82,7 @@ public class DocumentSummary extends FieldView { */ public void purgeImplicits() { List<SummaryField> falseImplicits = new ArrayList<>(); - for (SummaryField summaryField : getSummaryFields() ) { + for (SummaryField summaryField : getSummaryFields().values()) { if (summaryField.isImplicit()) continue; for (Iterator<SummaryField.Source> j = summaryField.sourceIterator(); j.hasNext(); ) { String sourceName = j.next().getName(); @@ -101,12 +100,12 @@ public class DocumentSummary extends FieldView { /** Sets the parent of this. Both summaries must be present in the same search definition */ public void setInherited(String inherited) { - this.inherited = inherited; + this.inherited = Optional.of(inherited); } - /** Returns the parent of this, or null if none is inherited */ - public DocumentSummary getInherited() { - return owner.getSummary(inherited); + /** Returns the parent of this, if any */ + public Optional<DocumentSummary> inherited() { + return inherited.map(name -> owner.getSummary(name)); } @Override @@ -115,14 +114,14 @@ public class DocumentSummary extends FieldView { } public void validate(DeployLogger logger) { - if (inherited != null) { - if ( ! owner.getSummaries().containsKey(inherited)) { + if (inherited.isPresent()) { + if ( ! owner.getSummaries().containsKey(inherited.get())) { logger.log(Level.WARNING, - this + " inherits " + inherited + " but this" + " is not present in " + owner); + this + " inherits " + inherited.get() + " but this" + " is not present in " + owner); logger.logApplicationPackage(Level.WARNING, - this + " inherits " + inherited + " but this" + " is not present in " + owner); + this + " inherits " + inherited.get() + " but this" + " is not present in " + owner); // TODO: When safe, replace the above by - // throw new IllegalArgumentException(this + " inherits " + inherited + " but this" + + // throw new IllegalArgumentException(this + " inherits " + inherited.get() + " but this" + // " is not present in " + owner); // ... and update SummaryTestCase.testValidationOfInheritedSummary } diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/SchemaTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/SchemaTestCase.java index 329d27472c2..8b96779f695 100644 --- a/config-model/src/test/java/com/yahoo/searchdefinition/SchemaTestCase.java +++ b/config-model/src/test/java/com/yahoo/searchdefinition/SchemaTestCase.java @@ -166,7 +166,7 @@ public class SchemaTestCase { assertTrue(child.onnxModels().asMap().containsKey("child_model")); assertNotNull(child.getSummary("parent_summary")); assertNotNull(child.getSummary("child_summary")); - assertEquals("parent_summary", child.getSummary("child_summary").getInherited().getName()); + assertEquals("parent_summary", child.getSummary("child_summary").inherited().get().getName()); assertTrue(child.getSummaries().containsKey("parent_summary")); assertTrue(child.getSummaries().containsKey("child_summary")); assertNotNull(child.getSummaryField("pf1")); diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/SummaryTestCase.java b/config-model/src/test/java/com/yahoo/searchdefinition/SummaryTestCase.java index e57dcf38fed..dee63f04ad5 100644 --- a/config-model/src/test/java/com/yahoo/searchdefinition/SummaryTestCase.java +++ b/config-model/src/test/java/com/yahoo/searchdefinition/SummaryTestCase.java @@ -10,6 +10,7 @@ import static com.yahoo.config.model.test.TestUtil.joinLines; import java.util.Collection; import java.util.List; +import java.util.Optional; import java.util.logging.Level; import java.util.stream.Collectors; @@ -172,12 +173,12 @@ public class SummaryTestCase { new TestValue(everythingSummary, titleArtistSummary, List.of(List.of(titleField), implicitFields, List.of(artistField, albumField))) ); tests.forEach(testValue -> { - var actualFields = testValue.summary.getSummaryFields().stream() + var actualFields = testValue.summary.getSummaryFields().values().stream() .map(FieldBase::getName) .collect(Collectors.toList()); assertEquals(testValue.summary.getName() + (testValue.parent == null ? " does not inherit anything" : " inherits " + testValue.parent.getName()), - testValue.parent, - testValue.summary.getInherited()); + Optional.ofNullable(testValue.parent), + testValue.summary.inherited()); assertEquals("Summary " + testValue.summary.getName() + " has expected fields", testValue.fields, actualFields); }); } |