From 28dfdecc916a63a7d94d5d8687b6c7d6cc997378 Mon Sep 17 00:00:00 2001 From: Bjørn Christian Seime Date: Thu, 30 Mar 2017 15:44:35 +0200 Subject: Add attribute transform to summary fields of imported fields --- .../yahoo/searchdefinition/ImmutableSearch.java | 4 ++ .../java/com/yahoo/searchdefinition/Search.java | 3 +- ...ttributeTransformToSummaryOfImportedFields.java | 43 ++++++++++++++++ .../searchdefinition/processing/Processing.java | 1 + .../src/test/derived/importedfields/summarymap.cfg | 6 +++ ...buteTransformToSummaryOfImportedFieldsTest.java | 59 ++++++++++++++++++++++ 6 files changed, 115 insertions(+), 1 deletion(-) create mode 100644 config-model/src/main/java/com/yahoo/searchdefinition/processing/AddAttributeTransformToSummaryOfImportedFields.java create mode 100644 config-model/src/test/java/com/yahoo/searchdefinition/processing/AddAttributeTransformToSummaryOfImportedFieldsTest.java (limited to 'config-model') diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/ImmutableSearch.java b/config-model/src/main/java/com/yahoo/searchdefinition/ImmutableSearch.java index 97bf510c1a5..de23cef447f 100644 --- a/config-model/src/main/java/com/yahoo/searchdefinition/ImmutableSearch.java +++ b/config-model/src/main/java/com/yahoo/searchdefinition/ImmutableSearch.java @@ -2,7 +2,9 @@ package com.yahoo.searchdefinition; import com.yahoo.searchdefinition.document.ImmutableSDField; +import com.yahoo.vespa.documentmodel.SummaryField; +import java.util.Map; import java.util.stream.Stream; /** @@ -18,4 +20,6 @@ public interface ImmutableSearch { ImmutableSDField getField(String name); Stream allFields(); + + Map getSummaryFields(ImmutableSDField field); } diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/Search.java b/config-model/src/main/java/com/yahoo/searchdefinition/Search.java index 2dfcb3c8dde..51f3870d47b 100644 --- a/config-model/src/main/java/com/yahoo/searchdefinition/Search.java +++ b/config-model/src/main/java/com/yahoo/searchdefinition/Search.java @@ -512,7 +512,8 @@ public class Search implements Serializable, ImmutableSearch { * @param field The source field. * @return The map of summary fields found. */ - public Map getSummaryFields(SDField field) { + @Override + public Map getSummaryFields(ImmutableSDField field) { Map summaryFields = new java.util.LinkedHashMap<>(); for (DocumentSummary documentSummary : summaries.values()) { for (SummaryField summaryField : documentSummary.getSummaryFields()) { 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 new file mode 100644 index 00000000000..c9ea7fb9d1f --- /dev/null +++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/AddAttributeTransformToSummaryOfImportedFields.java @@ -0,0 +1,43 @@ +// Copyright 2017 Yahoo Inc. 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.searchdefinition.RankProfileRegistry; +import com.yahoo.searchdefinition.Search; +import com.yahoo.searchdefinition.document.ImmutableSDField; +import com.yahoo.vespa.documentmodel.SummaryField; +import com.yahoo.vespa.documentmodel.SummaryTransform; +import com.yahoo.vespa.model.container.search.QueryProfiles; + +import java.util.stream.Stream; + +/** + * Adds the attribute summary transform ({@link SummaryTransform#ATTRIBUTE} to all {@link SummaryField} having an imported + * field as source. + * + * @author bjorncs + */ +public class AddAttributeTransformToSummaryOfImportedFields extends Processor { + + public AddAttributeTransformToSummaryOfImportedFields(Search search, + DeployLogger deployLogger, + RankProfileRegistry rankProfileRegistry, + QueryProfiles queryProfiles) { + super(search, deployLogger, rankProfileRegistry, queryProfiles); + } + + @Override + public void process() { + search.allImportedFields() + .flatMap(this::getSummaryFieldsForImportedField) + .forEach(AddAttributeTransformToSummaryOfImportedFields::setAttributeTransform); + } + + private Stream getSummaryFieldsForImportedField(ImmutableSDField importedField) { + return search.getSummaryFields(importedField).values().stream(); + } + + private static void setAttributeTransform(SummaryField summaryField) { + summaryField.setTransform(SummaryTransform.ATTRIBUTE); + } +} 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 f725113f5ab..5ec60ef7e54 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 @@ -72,6 +72,7 @@ public class Processing { TensorFieldProcessor::new, RankProfileTypeSettingsProcessor::new, ReferenceFieldsProcessor::new, + AddAttributeTransformToSummaryOfImportedFields::new, // These two should be last. IndexingValidation::new, diff --git a/config-model/src/test/derived/importedfields/summarymap.cfg b/config-model/src/test/derived/importedfields/summarymap.cfg index 8956a146b74..39408bbff5e 100644 --- a/config-model/src/test/derived/importedfields/summarymap.cfg +++ b/config-model/src/test/derived/importedfields/summarymap.cfg @@ -5,3 +5,9 @@ override[].arguments "" override[].field "summaryfeatures" override[].command "summaryfeatures" override[].arguments "" +override[].field "my_budget" +override[].command "attribute" +override[].arguments "my_budget" +override[].field "my_person_name" +override[].command "attribute" +override[].arguments "my_person_name" diff --git a/config-model/src/test/java/com/yahoo/searchdefinition/processing/AddAttributeTransformToSummaryOfImportedFieldsTest.java b/config-model/src/test/java/com/yahoo/searchdefinition/processing/AddAttributeTransformToSummaryOfImportedFieldsTest.java new file mode 100644 index 00000000000..78daa7b5fef --- /dev/null +++ b/config-model/src/test/java/com/yahoo/searchdefinition/processing/AddAttributeTransformToSummaryOfImportedFieldsTest.java @@ -0,0 +1,59 @@ +package com.yahoo.searchdefinition.processing; + +import com.yahoo.config.model.test.MockApplicationPackage; +import com.yahoo.document.DataType; +import com.yahoo.document.Field; +import com.yahoo.searchdefinition.DocumentReference; +import com.yahoo.searchdefinition.Search; +import com.yahoo.searchdefinition.document.ImportedField; +import com.yahoo.searchdefinition.document.ImportedFields; +import com.yahoo.searchdefinition.document.SDDocumentType; +import com.yahoo.searchdefinition.document.SDField; +import com.yahoo.vespa.documentmodel.DocumentSummary; +import com.yahoo.vespa.documentmodel.SummaryField; +import com.yahoo.vespa.documentmodel.SummaryTransform; +import org.junit.Test; + +import java.util.Collections; + +import static org.junit.Assert.assertEquals; + +/** + * @author bjorncs + */ +public class AddAttributeTransformToSummaryOfImportedFieldsTest { + + private static final String IMPORTED_FIELD_NAME = "imported_myfield"; + private static final String DOCUMENT_NAME = "mydoc"; + private static final String SUMMARY_NAME = "mysummary"; + + @Test + public void attribute_summary_transform_applied_to_summary_field_of_imported_field() { + Search search = createDocumentWithImportedFieldInDocumentSummary(); + AddAttributeTransformToSummaryOfImportedFields processor = new AddAttributeTransformToSummaryOfImportedFields( + search,null,null,null); + processor.process(); + SummaryField summaryField = search.getSummaries().get(SUMMARY_NAME).getSummaryField(IMPORTED_FIELD_NAME); + SummaryTransform actualTransform = summaryField.getTransform(); + assertEquals(SummaryTransform.ATTRIBUTE, actualTransform); + } + + private static Search createDocumentWithImportedFieldInDocumentSummary() { + // Create search with a single imported field + Search search = new Search(DOCUMENT_NAME, MockApplicationPackage.createEmpty()); + SDDocumentType document = new SDDocumentType("mydoc", search); + search.addDocument(document); + Search targetDocument = new Search("otherdoc", MockApplicationPackage.createEmpty()); + SDField targetField = new SDField("myfield", DataType.INT); + DocumentReference documentReference = new DocumentReference(new Field("reference_field"), targetDocument); + ImportedField importedField = new ImportedField(IMPORTED_FIELD_NAME, documentReference, targetField); + search.setImportedFields(new ImportedFields(Collections.singletonMap(IMPORTED_FIELD_NAME, importedField))); + + // Create document summary + DocumentSummary summary = new DocumentSummary(SUMMARY_NAME); + summary.add(new SummaryField(IMPORTED_FIELD_NAME, DataType.INT)); + search.addSummary(summary); + return search; + } + +} -- cgit v1.2.3