summaryrefslogtreecommitdiffstats
path: root/config-model/src/main/java/com/yahoo/searchdefinition/processing/SummaryConsistency.java
diff options
context:
space:
mode:
Diffstat (limited to 'config-model/src/main/java/com/yahoo/searchdefinition/processing/SummaryConsistency.java')
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/SummaryConsistency.java131
1 files changed, 0 insertions, 131 deletions
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
deleted file mode 100644
index e2e0cf94bb8..00000000000
--- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/SummaryConsistency.java
+++ /dev/null
@@ -1,131 +0,0 @@
-// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-package com.yahoo.searchdefinition.processing;
-
-import com.yahoo.config.application.api.DeployLogger;
-import com.yahoo.document.DataType;
-import com.yahoo.document.TensorDataType;
-import com.yahoo.searchdefinition.RankProfileRegistry;
-import com.yahoo.searchdefinition.Schema;
-import com.yahoo.searchdefinition.document.Attribute;
-import com.yahoo.document.WeightedSetDataType;
-import com.yahoo.searchdefinition.document.ImmutableSDField;
-import com.yahoo.vespa.documentmodel.DocumentSummary;
-import com.yahoo.vespa.documentmodel.SummaryField;
-import com.yahoo.vespa.documentmodel.SummaryTransform;
-import com.yahoo.vespa.model.container.search.QueryProfiles;
-
-import static com.yahoo.searchdefinition.document.ComplexAttributeFieldUtils.isComplexFieldWithOnlyStructFieldAttributes;
-
-/**
- * Ensure that summary field transforms for fields having the same name
- * are consistent across summary classes
- *
- * @author bratseth
- */
-public class SummaryConsistency extends Processor {
-
- public SummaryConsistency(Schema schema, DeployLogger deployLogger, RankProfileRegistry rankProfileRegistry, QueryProfiles queryProfiles) {
- super(schema, deployLogger, rankProfileRegistry, queryProfiles);
- }
-
- @Override
- public void process(boolean validate, boolean documentsOnly) {
- for (DocumentSummary summary : schema.getSummaries().values()) {
- if (summary.getName().equals("default")) continue;
-
- for (SummaryField summaryField : summary.getSummaryFields().values()) {
- assertConsistency(summaryField, schema, validate);
- makeAttributeTransformIfAppropriate(summaryField, schema);
- makeAttributeCombinerTransformIfAppropriate(summaryField, schema);
- }
- }
- }
-
- private void assertConsistency(SummaryField summaryField, Schema schema, boolean validate) {
- // Compare to default:
- SummaryField existingDefault = schema.getSummariesInThis().get("default").getSummaryField(summaryField.getName());
- if (existingDefault != null) {
- if (validate)
- assertConsistentTypes(existingDefault, summaryField);
- makeConsistentWithDefaultOrThrow(existingDefault, summaryField);
- }
- else {
- // If no default, compare to whichever definition of the field
- SummaryField existing = schema.getExplicitSummaryField(summaryField.getName());
- if (existing == null) return;
- if (validate)
- assertConsistentTypes(existing, summaryField);
- makeConsistentOrThrow(existing, summaryField, schema);
- }
- }
-
- /** If the source is an attribute, make this use the attribute transform */
- private void makeAttributeTransformIfAppropriate(SummaryField summaryField, Schema schema) {
- if (summaryField.getTransform() != SummaryTransform.NONE) return;
- Attribute attribute = schema.getAttribute(summaryField.getSingleSource());
- if (attribute == null) return;
- summaryField.setTransform(SummaryTransform.ATTRIBUTE);
- }
-
- /** If the source is a complex field with only struct field attributes then make this use the attribute combiner transform */
- private void makeAttributeCombinerTransformIfAppropriate(SummaryField summaryField, Schema schema) {
- if (summaryField.getTransform() == SummaryTransform.NONE) {
- String source_field_name = summaryField.getSingleSource();
- ImmutableSDField source = schema.getField(source_field_name);
- if (source != null && isComplexFieldWithOnlyStructFieldAttributes(source)) {
- summaryField.setTransform(SummaryTransform.ATTRIBUTECOMBINER);
- }
- }
- }
-
- private void assertConsistentTypes(SummaryField existing, SummaryField seen) {
- if (existing.getDataType() instanceof WeightedSetDataType && seen.getDataType() instanceof WeightedSetDataType &&
- ((WeightedSetDataType)existing.getDataType()).getNestedType().equals(((WeightedSetDataType)seen.getDataType()).getNestedType()))
- return; // Disregard create-if-nonexistent and create-if-zero distinction
- if ( ! compatibleTypes(seen.getDataType(), existing.getDataType()))
- throw new IllegalArgumentException(existing.toLocateString() + " is inconsistent with " +
- seen.toLocateString() + ": All declarations of the same summary field must have the same type");
- }
-
- private boolean compatibleTypes(DataType summaryType, DataType existingType) {
- if (summaryType instanceof TensorDataType && existingType instanceof TensorDataType) {
- return summaryType.isAssignableFrom(existingType); // TODO: Just do this for all types
- }
- return summaryType.equals(existingType);
- }
-
- private void makeConsistentOrThrow(SummaryField field1, SummaryField field2, Schema schema) {
- if (field2.getTransform() == SummaryTransform.ATTRIBUTE && field1.getTransform() == SummaryTransform.NONE) {
- Attribute attribute = schema.getAttribute(field1.getName());
- if (attribute != null) {
- field1.setTransform(SummaryTransform.ATTRIBUTE);
- }
- }
-
- if (field2.getTransform().equals(SummaryTransform.NONE)) {
- field2.setTransform(field1.getTransform());
- }
- else { // New field sets an explicit transform - must be the same
- assertEqualTransform(field1,field2);
- }
- }
-
- private void makeConsistentWithDefaultOrThrow(SummaryField defaultField, SummaryField newField) {
- if (newField.getTransform().equals(SummaryTransform.NONE)) {
- newField.setTransform(defaultField.getTransform());
- }
- else { // New field sets an explicit transform - must be the same
- assertEqualTransform(defaultField,newField);
- }
- }
-
- private void assertEqualTransform(SummaryField field1, SummaryField field2) {
- if ( ! field2.getTransform().equals(field1.getTransform())) {
- throw new IllegalArgumentException("Conflicting summary transforms. " + field2 + " is already defined as " +
- field1 + ". A field with the same name " +
- "can not have different transforms in different summary classes");
- }
- }
-
-
-}