diff options
author | Geir Storli <geirst@oath.com> | 2017-12-06 16:55:36 -0800 |
---|---|---|
committer | Geir Storli <geirst@oath.com> | 2017-12-06 16:55:36 -0800 |
commit | 05a49aae7786d42764f82a996f8ebd5378a4c1db (patch) | |
tree | 1ac4f432197319df39a830124b13de41b447178e /config-model/src/main | |
parent | a9adc2795c1a4daa02ac5e98635ffeb13732ed1b (diff) |
Add validator that fails if imported predicate fields are used in document summaries (not supported).
Diffstat (limited to 'config-model/src/main')
2 files changed, 64 insertions, 0 deletions
diff --git a/config-model/src/main/java/com/yahoo/searchdefinition/processing/ImportedFieldsInSummayValidator.java b/config-model/src/main/java/com/yahoo/searchdefinition/processing/ImportedFieldsInSummayValidator.java new file mode 100644 index 00000000000..eaa85815736 --- /dev/null +++ b/config-model/src/main/java/com/yahoo/searchdefinition/processing/ImportedFieldsInSummayValidator.java @@ -0,0 +1,63 @@ +package com.yahoo.searchdefinition.processing; + +import com.yahoo.config.application.api.DeployLogger; +import com.yahoo.document.DataType; +import com.yahoo.searchdefinition.RankProfileRegistry; +import com.yahoo.searchdefinition.Search; +import com.yahoo.searchdefinition.document.ImportedField; +import com.yahoo.vespa.documentmodel.DocumentSummary; +import com.yahoo.vespa.documentmodel.SummaryField; +import com.yahoo.vespa.model.container.search.QueryProfiles; + +import java.util.Map; + +/** + * Validates that imported fields in document summaries are of supported types. + * Currently, predicate fields are NOT supported. + * + * @author geirst + */ +public class ImportedFieldsInSummayValidator extends Processor { + + + public ImportedFieldsInSummayValidator(Search search, DeployLogger deployLogger, RankProfileRegistry rankProfileRegistry, QueryProfiles queryProfiles) { + super(search, deployLogger, rankProfileRegistry, queryProfiles); + } + + @Override + public void process() { + if (search.importedFields().isPresent()) { + validateDocumentSummaries(search.getSummaries()); + } + } + + private void validateDocumentSummaries(Map<String, DocumentSummary> summaries) { + for (DocumentSummary summary : summaries.values()) { + for (SummaryField field : summary.getSummaryFields()) { + ImportedField importedField = getImportedField(field); + if (importedField != null) { + validateImportedSummaryField(summary, field, importedField); + } + } + } + } + + private ImportedField getImportedField(SummaryField field) { + return search.importedFields().get().fields().get(field.getName()); + } + + private void validateImportedSummaryField(DocumentSummary summary, SummaryField field, ImportedField importedField) { + if (field.getDataType().equals(DataType.PREDICATE) && + importedField.targetField().getDataType().equals(DataType.PREDICATE)) { + fail(summary, field, "Is of type predicate. Not supported in document summaries"); + } + } + + private void fail(DocumentSummary summary, SummaryField importedField, String msg) { + throw new IllegalArgumentException("For search '" + search.getName() + "', document summary '" + summary.getName() + + "', imported summary field '" + importedField.getName() + "': " + msg); + } +} + + + 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 26f98026d4f..90183848094 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 @@ -73,6 +73,7 @@ public class Processing { TensorFieldProcessor::new, RankProfileTypeSettingsProcessor::new, ReferenceFieldsProcessor::new, + ImportedFieldsInSummayValidator::new, FastAccessValidator::new, ReservedMacroNames::new, |