diff options
author | Geir Storli <geirst@yahooinc.com> | 2022-09-20 13:53:54 +0000 |
---|---|---|
committer | Geir Storli <geirst@yahooinc.com> | 2022-09-21 08:34:20 +0000 |
commit | b8d3ab8c0ad28c5cedbe414eb9c7c55a4e0bd6ae (patch) | |
tree | 2edb9e1024ff78cb1fd5980164702fae25cc9889 /streamingvisitors | |
parent | b66a12b478e9fbda0900c36b1ec67d53dc811488 (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.cpp | 10 | ||||
-rw-r--r-- | streamingvisitors/src/vespa/vsm/vsm/docsumfilter.cpp | 2 | ||||
-rw-r--r-- | streamingvisitors/src/vespa/vsm/vsm/vsm-adapter.cpp | 6 |
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 { |