summaryrefslogtreecommitdiffstats
path: root/streamingvisitors
diff options
context:
space:
mode:
authorGeir Storli <geirst@yahooinc.com>2022-09-20 13:53:54 +0000
committerGeir Storli <geirst@yahooinc.com>2022-09-21 08:34:20 +0000
commitb8d3ab8c0ad28c5cedbe414eb9c7c55a4e0bd6ae (patch)
tree2edb9e1024ff78cb1fd5980164702fae25cc9889 /streamingvisitors
parentb66a12b478e9fbda0900c36b1ec67d53dc811488 (diff)
Optimize resolving and usage of summary result class.
If an explicit set of fields is specified in the docsum request, we avoid reading the document instance from disk if all those fields are generated on the fly.
Diffstat (limited to 'streamingvisitors')
-rw-r--r--streamingvisitors/src/vespa/searchvisitor/searchvisitor.cpp10
-rw-r--r--streamingvisitors/src/vespa/vsm/vsm/docsumfilter.cpp2
-rw-r--r--streamingvisitors/src/vespa/vsm/vsm/vsm-adapter.cpp6
3 files changed, 10 insertions, 8 deletions
diff --git a/streamingvisitors/src/vespa/searchvisitor/searchvisitor.cpp b/streamingvisitors/src/vespa/searchvisitor/searchvisitor.cpp
index 79bd5a4f77b..205bf54ce5e 100644
--- a/streamingvisitors/src/vespa/searchvisitor/searchvisitor.cpp
+++ b/streamingvisitors/src/vespa/searchvisitor/searchvisitor.cpp
@@ -145,13 +145,15 @@ SearchVisitor::SummaryGenerator::get_streaming_docsums_state(const vespalib::str
if (itr != _docsum_states.end()) {
return *itr->second;
}
- auto rci = _docsumWriter->resolveClassInfo(summary_class);
+ vespalib::hash_set<vespalib::string> fields;
+ for (const auto& field: _summaryFields) {
+ fields.insert(field);
+ }
+ auto rci = _docsumWriter->resolveClassInfo(summary_class, fields);
auto state = std::make_unique<StreamingDocsumsState>(_callback, rci);
auto &ds = state->get_state();
ds._args.setResultClassName(summary_class);
- for (const auto &field: _summaryFields) {
- ds._args.add_field(field);
- }
+ ds._args.set_fields(fields);
if (_dump_features.has_value()) {
ds._args.dumpFeatures(_dump_features.value());
}
diff --git a/streamingvisitors/src/vespa/vsm/vsm/docsumfilter.cpp b/streamingvisitors/src/vespa/vsm/vsm/docsumfilter.cpp
index ec28688196e..7b1db31aa09 100644
--- a/streamingvisitors/src/vespa/vsm/vsm/docsumfilter.cpp
+++ b/streamingvisitors/src/vespa/vsm/vsm/docsumfilter.cpp
@@ -311,7 +311,7 @@ void DocsumFilter::init(const FieldMap & fieldMap, const FieldPathMapT & fieldPa
const ResConfigEntry &entry = *resClass->GetEntry(i);
const DocsumTools::FieldSpec & toolsSpec = inputSpecs[i];
_fields.push_back(DocsumFieldSpec(toolsSpec.getCommand()));
- LOG(debug, "About to prepare field spec for summary field '%s'", entry._name.c_str());
+ LOG(debug, "About to prepare field spec for summary field '%s'", entry.name().c_str());
prepareFieldSpec(_fields.back(), toolsSpec, fieldMap, fieldPathMap);
}
assert(entryCnt == _fields.size());
diff --git a/streamingvisitors/src/vespa/vsm/vsm/vsm-adapter.cpp b/streamingvisitors/src/vespa/vsm/vsm/vsm-adapter.cpp
index 5b3ef733eec..34a8ca8713e 100644
--- a/streamingvisitors/src/vespa/vsm/vsm/vsm-adapter.cpp
+++ b/streamingvisitors/src/vespa/vsm/vsm/vsm-adapter.cpp
@@ -92,12 +92,12 @@ DocsumTools::obtainFieldNames(const FastS_VsmsummaryHandle &cfg)
for (uint32_t i = 0; i < _resultClass->GetNumEntries(); ++i) {
const ResConfigEntry * entry = _resultClass->GetEntry(i);
_fieldSpecs.emplace_back();
- _fieldSpecs.back().setOutputName(entry->_name);
+ _fieldSpecs.back().setOutputName(entry->name());
bool found = false;
if (cfg) {
// check if we have this summary field in the vsmsummary config
for (uint32_t j = 0; j < cfg->fieldmap.size() && !found; ++j) {
- if (entry->_name == cfg->fieldmap[j].summary.c_str()) {
+ if (entry->name() == cfg->fieldmap[j].summary.c_str()) {
for (uint32_t k = 0; k < cfg->fieldmap[j].document.size(); ++k) {
_fieldSpecs.back().getInputNames().push_back(cfg->fieldmap[j].document[k].field);
}
@@ -108,7 +108,7 @@ DocsumTools::obtainFieldNames(const FastS_VsmsummaryHandle &cfg)
}
if (!found) {
// use yourself as input
- _fieldSpecs.back().getInputNames().push_back(entry->_name);
+ _fieldSpecs.back().getInputNames().push_back(entry->name());
}
}
} else {