diff options
Diffstat (limited to 'config-model/src/main/java/com/yahoo/searchdefinition/processing/IndexingOutputs.java')
-rw-r--r-- | config-model/src/main/java/com/yahoo/searchdefinition/processing/IndexingOutputs.java | 31 |
1 files changed, 17 insertions, 14 deletions
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/IndexingOutputs.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/IndexingOutputs.java index 99cbf633221..420d0fc619b 100644 --- a/config-model/src/main/java/com/yahoo/searchdefinition/processing/IndexingOutputs.java +++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/IndexingOutputs.java @@ -16,11 +16,11 @@ import com.yahoo.vespa.model.container.search.QueryProfiles; import java.util.*; /** - * <p>This processor modifies all indexing scripts so that they output to the owning field by default. It also prevents + * This processor modifies all indexing scripts so that they output to the owning field by default. It also prevents * any output expression from writing to any field except for the owning field. Finally, for <tt>SummaryExpression</tt>, - * this processor expands to write all appropriate summary fields.</p> + * this processor expands to write all appropriate summary fields. * - * @author <a href="mailto:simon@yahoo-inc.com">Simon Thoresen</a> + * @author Simon Thoresen */ public class IndexingOutputs extends Processor { @@ -29,21 +29,19 @@ public class IndexingOutputs extends Processor { } @Override - public void process() { + public void process(boolean validate) { for (SDField field : search.allConcreteFields()) { ScriptExpression script = field.getIndexingScript(); - if (script == null) { - continue; - } + if (script == null) continue; + Set<String> summaryFields = new TreeSet<>(); findSummaryTo(search, field, summaryFields, summaryFields); - MyConverter converter = new MyConverter(search, field, summaryFields); + MyConverter converter = new MyConverter(search, field, summaryFields, validate); field.setIndexingScript((ScriptExpression)converter.convert(script)); } } - public void findSummaryTo(Search search, SDField field, Set<String> dynamicSummary, - Set<String> staticSummary) { + public void findSummaryTo(Search search, SDField field, Set<String> dynamicSummary, Set<String> staticSummary) { Map<String, SummaryField> summaryFields = search.getSummaryFields(field); if (summaryFields.isEmpty()) { fillSummaryToFromField(field, dynamicSummary, staticSummary); @@ -59,7 +57,8 @@ public class IndexingOutputs extends Processor { } } - private void fillSummaryToFromSummaryField(Search search, SDField field, SummaryField summaryField, Set<String> dynamicSummary, Set<String> staticSummary) { + private void fillSummaryToFromSummaryField(Search search, SDField field, SummaryField summaryField, + Set<String> dynamicSummary, Set<String> staticSummary) { SummaryTransform summaryTransform = summaryField.getTransform(); String summaryName = summaryField.getName(); if (summaryTransform.isDynamic() && summaryField.getSourceCount() > 2) { @@ -98,23 +97,25 @@ public class IndexingOutputs extends Processor { final Search search; final Field field; final Set<String> summaryFields; + final boolean validate; - MyConverter(Search search, Field field, Set<String> summaryFields) { + MyConverter(Search search, Field field, Set<String> summaryFields, boolean validate) { this.search = search; this.field = field; this.summaryFields = summaryFields.isEmpty() ? Collections.singleton(field.getName()) : summaryFields; + this.validate = validate; } @Override protected boolean shouldConvert(Expression exp) { - if (!(exp instanceof OutputExpression)) { + if ( ! (exp instanceof OutputExpression)) { return false; } String fieldName = ((OutputExpression)exp).getFieldName(); if (fieldName == null) { return true; // inject appropriate field name } - if (!fieldName.equals(field.getName())) { + if ( validate && ! fieldName.equals(field.getName())) { fail(search, field, "Indexing expression '" + exp + "' attempts to write to a field other than '" + field.getName() + "'."); } @@ -137,5 +138,7 @@ public class IndexingOutputs extends Processor { } return new StatementExpression(ret); } + } + } |