diff options
author | Geir Storli <geirst@verizonmedia.com> | 2021-07-02 14:33:34 +0000 |
---|---|---|
committer | Geir Storli <geirst@verizonmedia.com> | 2021-07-02 14:33:34 +0000 |
commit | e0d763e03052c4cbd11b270732bcbb1a88ee5222 (patch) | |
tree | 5edec8e13a5f6dda9b8d865d2847a75f65abcd8d /searchsummary | |
parent | 1bc04aaeb4f491de8a68386f49c2e9bb62c6f7fe (diff) |
Omit filling summary features if specified for the document summary class.
Diffstat (limited to 'searchsummary')
6 files changed, 30 insertions, 11 deletions
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/docsumstate.cpp b/searchsummary/src/vespa/searchsummary/docsummary/docsumstate.cpp index 99a372d9676..6f042ee3907 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/docsumstate.cpp +++ b/searchsummary/src/vespa/searchsummary/docsummary/docsumstate.cpp @@ -36,6 +36,7 @@ GetDocsumsState::GetDocsumsState(GetDocsumsStateCallback &callback) _parsedLocations(), _summaryFeatures(nullptr), _summaryFeaturesCached(false), + _omit_summary_features(false), _rankFeatures(nullptr), _matching_elements(), _jsonStringer() diff --git a/searchsummary/src/vespa/searchsummary/docsummary/docsumstate.h b/searchsummary/src/vespa/searchsummary/docsummary/docsumstate.h index db0f8e6e8ad..88a95d0446c 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/docsumstate.h +++ b/searchsummary/src/vespa/searchsummary/docsummary/docsumstate.h @@ -84,6 +84,7 @@ public: // used by SummaryFeaturesDFW FeatureSet::SP _summaryFeatures; bool _summaryFeaturesCached; + bool _omit_summary_features; // used by RankFeaturesDFW FeatureSet::SP _rankFeatures; diff --git a/searchsummary/src/vespa/searchsummary/docsummary/resultclass.cpp b/searchsummary/src/vespa/searchsummary/docsummary/resultclass.cpp index 8066a5e65db..f52cc62af92 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/resultclass.cpp +++ b/searchsummary/src/vespa/searchsummary/docsummary/resultclass.cpp @@ -15,7 +15,8 @@ ResultClass::ResultClass(const char *name, uint32_t id, util::StringEnum & field _nameMap(), _fieldEnum(fieldEnum), _enumMap(), - _dynInfo(NULL) + _dynInfo(NULL), + _omit_summary_features(false) { } diff --git a/searchsummary/src/vespa/searchsummary/docsummary/resultclass.h b/searchsummary/src/vespa/searchsummary/docsummary/resultclass.h index 52e331cd365..88c3552387b 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/resultclass.h +++ b/searchsummary/src/vespa/searchsummary/docsummary/resultclass.h @@ -141,6 +141,9 @@ private: util::StringEnum &_fieldEnum; // fieldname -> f.n. enum value [SHARED] std::vector<int> _enumMap; // fieldname enum value -> entry index DynamicInfo *_dynInfo; // fields overridden and generated + // Whether or not summary features should be omitted when filling this summary class. + // As default, summary features are always included. + bool _omit_summary_features; public: typedef std::unique_ptr<ResultClass> UP; @@ -278,6 +281,14 @@ public: { return (offset < _entries.size()) ? &_entries[offset] : NULL; } + + void set_omit_summary_features(bool value) { + _omit_summary_features = value; + } + + bool omit_summary_features() const { + return _omit_summary_features; + } }; } diff --git a/searchsummary/src/vespa/searchsummary/docsummary/resultconfig.cpp b/searchsummary/src/vespa/searchsummary/docsummary/resultconfig.cpp index ead3a4a2f9d..579779efb73 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/resultconfig.cpp +++ b/searchsummary/src/vespa/searchsummary/docsummary/resultconfig.cpp @@ -127,25 +127,27 @@ ResultConfig::ReadConfig(const vespa::config::search::SummaryConfig &cfg, const int maxclassID = 0x7fffffff; // avoid negative classids _defaultSummaryId = cfg.defaultsummaryid; for (uint32_t i = 0; rc && i < cfg.classes.size(); i++) { - if (cfg.classes[i].name.empty()) { + const auto& cfg_class = cfg.classes[i]; + if (cfg_class.name.empty()) { LOG(warning, "%s classes[%d]: empty name", configId, i); } - int classID = cfg.classes[i].id; + int classID = cfg_class.id; if (classID < 0 || classID > maxclassID) { LOG(error, "%s classes[%d]: bad id %d", configId, i, classID); rc = false; break; } - ResultClass *resClass = AddResultClass(cfg.classes[i].name.c_str(), classID); + ResultClass *resClass = AddResultClass(cfg_class.name.c_str(), classID); if (resClass == nullptr) { - LOG(error,"%s: unable to add classes[%d] name %s", configId, i, cfg.classes[i].name.c_str()); + LOG(error,"%s: unable to add classes[%d] name %s", configId, i, cfg_class.name.c_str()); rc = false; break; } - for (unsigned int j = 0; rc && (j < cfg.classes[i].fields.size()); j++) { - const char *fieldtype = cfg.classes[i].fields[j].type.c_str(); - const char *fieldname = cfg.classes[i].fields[j].name.c_str(); - LOG(debug, "Reconfiguring class '%s' field '%s' of type '%s'", cfg.classes[i].name.c_str(), fieldname, fieldtype); + resClass->set_omit_summary_features(cfg_class.omitsummaryfeatures); + for (unsigned int j = 0; rc && (j < cfg_class.fields.size()); j++) { + const char *fieldtype = cfg_class.fields[j].type.c_str(); + const char *fieldname = cfg_class.fields[j].name.c_str(); + LOG(debug, "Reconfiguring class '%s' field '%s' of type '%s'", cfg_class.name.c_str(), fieldname, fieldtype); if (strcmp(fieldtype, "integer") == 0) { rc = resClass->AddConfigEntry(fieldname, RES_INT); } else if (strcmp(fieldtype, "short") == 0) { @@ -179,12 +181,12 @@ ResultConfig::ReadConfig(const vespa::config::search::SummaryConfig &cfg, const } else if (strcmp(fieldtype, "featuredata") == 0) { rc = resClass->AddConfigEntry(fieldname, RES_FEATUREDATA); } else { - LOG(error, "%s %s.fields[%d]: unknown type '%s'", configId, cfg.classes[i].name.c_str(), j, fieldtype); + LOG(error, "%s %s.fields[%d]: unknown type '%s'", configId, cfg_class.name.c_str(), j, fieldtype); rc = false; break; } if (!rc) { - LOG(error, "%s %s.fields[%d]: duplicate name '%s'", configId, cfg.classes[i].name.c_str(), j, fieldname); + LOG(error, "%s %s.fields[%d]: duplicate name '%s'", configId, cfg_class.name.c_str(), j, fieldname); break; } } diff --git a/searchsummary/src/vespa/searchsummary/docsummary/summaryfeaturesdfw.cpp b/searchsummary/src/vespa/searchsummary/docsummary/summaryfeaturesdfw.cpp index 425faff6a67..4d81f4505a7 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/summaryfeaturesdfw.cpp +++ b/searchsummary/src/vespa/searchsummary/docsummary/summaryfeaturesdfw.cpp @@ -30,6 +30,9 @@ static vespalib::Memory _M_cached("vespa.summaryFeatures.cached"); void SummaryFeaturesDFW::insertField(uint32_t docid, GetDocsumsState *state, ResType type, vespalib::slime::Inserter &target) { + if (state->_omit_summary_features) { + return; + } if ( ! state->_summaryFeatures) { state->_callback.FillSummaryFeatures(state, _env); if ( !state->_summaryFeatures) { // still no summary features to write |