aboutsummaryrefslogtreecommitdiffstats
path: root/searchsummary
diff options
context:
space:
mode:
authorGeir Storli <geirst@verizonmedia.com>2021-07-02 14:33:34 +0000
committerGeir Storli <geirst@verizonmedia.com>2021-07-02 14:33:34 +0000
commite0d763e03052c4cbd11b270732bcbb1a88ee5222 (patch)
tree5edec8e13a5f6dda9b8d865d2847a75f65abcd8d /searchsummary
parent1bc04aaeb4f491de8a68386f49c2e9bb62c6f7fe (diff)
Omit filling summary features if specified for the document summary class.
Diffstat (limited to 'searchsummary')
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/docsumstate.cpp1
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/docsumstate.h1
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/resultclass.cpp3
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/resultclass.h11
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/resultconfig.cpp22
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/summaryfeaturesdfw.cpp3
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