summaryrefslogtreecommitdiffstats
path: root/config-model
diff options
context:
space:
mode:
authorBjørn Christian Seime <bjorncs@yahoo-inc.com>2017-03-30 15:44:35 +0200
committerBjørn Christian Seime <bjorncs@yahoo-inc.com>2017-04-03 11:20:31 +0200
commit28dfdecc916a63a7d94d5d8687b6c7d6cc997378 (patch)
tree3d7dd35f34e801c9300dced35f462ab060d05687 /config-model
parenta4a97cdaf7f61c852cfbe81a654e407f2aa51369 (diff)
Add attribute transform to summary fields of imported fields
Diffstat (limited to 'config-model')
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/ImmutableSearch.java4
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/Search.java3
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/AddAttributeTransformToSummaryOfImportedFields.java43
-rw-r--r--config-model/src/main/java/com/yahoo/searchdefinition/processing/Processing.java1
-rw-r--r--config-model/src/test/derived/importedfields/summarymap.cfg6
-rw-r--r--config-model/src/test/java/com/yahoo/searchdefinition/processing/AddAttributeTransformToSummaryOfImportedFieldsTest.java59
6 files changed, 115 insertions, 1 deletions
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<ImmutableSDField> allFields();
+
+ Map<String, SummaryField> 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<String, SummaryField> getSummaryFields(SDField field) {
+ @Override
+ public Map<String, SummaryField> getSummaryFields(ImmutableSDField field) {
Map<String, SummaryField> 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<SummaryField> 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;
+ }
+
+}