diff options
Diffstat (limited to 'searchcore/src/vespa/searchcore/proton/attribute/attribute_aspect_delayer.cpp')
-rw-r--r-- | searchcore/src/vespa/searchcore/proton/attribute/attribute_aspect_delayer.cpp | 33 |
1 files changed, 31 insertions, 2 deletions
diff --git a/searchcore/src/vespa/searchcore/proton/attribute/attribute_aspect_delayer.cpp b/searchcore/src/vespa/searchcore/proton/attribute/attribute_aspect_delayer.cpp index cf803ec0368..4cf2df97fd0 100644 --- a/searchcore/src/vespa/searchcore/proton/attribute/attribute_aspect_delayer.cpp +++ b/searchcore/src/vespa/searchcore/proton/attribute/attribute_aspect_delayer.cpp @@ -7,6 +7,7 @@ #include <vespa/searchcore/proton/common/config_hash.hpp> #include <vespa/vespalib/stllike/hash_set.hpp> #include <vespa/config-attributes.h> +#include <vespa/config-summary.h> #include <vespa/config-summarymap.h> using search::attribute::ConfigConverter; @@ -14,6 +15,7 @@ using vespa::config::search::AttributesConfig; using vespa::config::search::AttributesConfigBuilder; using vespa::config::search::SummarymapConfig; using vespa::config::search::SummarymapConfigBuilder; +using vespa::config::search::SummaryConfig; using search::attribute::BasicType; namespace proton { @@ -40,6 +42,30 @@ bool willTriggerReprocessOnAttributeAspectRemoval(const search::attribute::Confi return fastPartialUpdateAttribute(cfg) && !indexschemaInspector.isStringIndex(name) && !isStructFieldAttribute(name); } +class KnownSummaryFields +{ + vespalib::hash_set<vespalib::string> _fields; + +public: + KnownSummaryFields(const SummaryConfig &summaryConfig); + ~KnownSummaryFields(); + + bool known(const vespalib::string &fieldName) const { + return _fields.find(fieldName) != _fields.end(); + } +}; + +KnownSummaryFields::KnownSummaryFields(const SummaryConfig &summaryConfig) + : _fields() +{ + for (const auto &summaryClass : summaryConfig.classes) { + for (const auto &summaryField : summaryClass.fields) { + _fields.insert(summaryField.name); + } + } +} + +KnownSummaryFields::~KnownSummaryFields() = default; } @@ -135,12 +161,14 @@ void handleOldAttributes(const AttributesConfig &oldAttributesConfig, const AttributesConfig &newAttributesConfig, const SummarymapConfig &oldSummarymapConfig, + const SummaryConfig &newSummaryConfig, const IIndexschemaInspector &oldIndexschemaInspector, const IDocumentTypeInspector &inspector, AttributesConfigBuilder &attributesConfig, SummarymapConfigBuilder &summarymapConfig) { vespalib::hash_set<vespalib::string> delayed; + KnownSummaryFields knownSummaryFields(newSummaryConfig); AttributesConfigHash newAttrs(newAttributesConfig.attribute); for (const auto &oldAttr : oldAttributesConfig.attribute) { search::attribute::Config oldCfg = ConfigConverter::convert(oldAttr); @@ -159,7 +187,7 @@ handleOldAttributes(const AttributesConfig &oldAttributesConfig, for (const auto &override : oldSummarymapConfig.override) { if (override.command == "attribute") { auto itr = delayed.find(override.field); - if (itr != delayed.end()) { + if (itr != delayed.end() && knownSummaryFields.known(override.field)) { summarymapConfig.override.emplace_back(override); } } @@ -172,6 +200,7 @@ void AttributeAspectDelayer::setup(const AttributesConfig &oldAttributesConfig, const SummarymapConfig &oldSummarymapConfig, const AttributesConfig &newAttributesConfig, + const SummaryConfig &newSummaryConfig, const SummarymapConfig &newSummarymapConfig, const IIndexschemaInspector &oldIndexschemaInspector, const IDocumentTypeInspector &inspector) @@ -181,7 +210,7 @@ AttributeAspectDelayer::setup(const AttributesConfig &oldAttributesConfig, oldIndexschemaInspector, inspector, *_attributesConfig, *_summarymapConfig); handleOldAttributes(oldAttributesConfig, newAttributesConfig, - oldSummarymapConfig, + oldSummarymapConfig, newSummaryConfig, oldIndexschemaInspector, inspector, *_attributesConfig, *_summarymapConfig); } |