summaryrefslogtreecommitdiffstats
path: root/searchcore
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 /searchcore
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 'searchcore')
-rw-r--r--searchcore/src/vespa/searchcore/proton/docsummary/docsumcontext.cpp7
1 files changed, 4 insertions, 3 deletions
diff --git a/searchcore/src/vespa/searchcore/proton/docsummary/docsumcontext.cpp b/searchcore/src/vespa/searchcore/proton/docsummary/docsumcontext.cpp
index 576b8f5bbd4..6c7f23166a7 100644
--- a/searchcore/src/vespa/searchcore/proton/docsummary/docsumcontext.cpp
+++ b/searchcore/src/vespa/searchcore/proton/docsummary/docsumcontext.cpp
@@ -71,20 +71,21 @@ makeSlimeParams(size_t chunkSize) {
vespalib::Slime::UP
DocsumContext::createSlimeReply()
{
- IDocsumWriter::ResolveClassInfo rci = _docsumWriter.resolveClassInfo(_docsumState._args.getResultClassName());
+ IDocsumWriter::ResolveClassInfo rci = _docsumWriter.resolveClassInfo(_docsumState._args.getResultClassName(),
+ _docsumState._args.get_fields());
_docsumWriter.InitState(_attrMgr, _docsumState, rci);
const size_t estimatedChunkSize(std::min(0x200000ul, _docsumState._docsumbuf.size()*0x400ul));
vespalib::Slime::UP response(std::make_unique<vespalib::Slime>(makeSlimeParams(estimatedChunkSize)));
Cursor & root = response->setObject();
Cursor & array = root.setArray(DOCSUMS);
const Symbol docsumSym = response->insert(DOCSUM);
- _docsumState._omit_summary_features = (rci.outputClass != nullptr) ? rci.outputClass->omit_summary_features() : true;
+ _docsumState._omit_summary_features = (rci.res_class != nullptr) ? rci.res_class->omit_summary_features() : true;
uint32_t num_ok(0);
for (uint32_t docId : _docsumState._docsumbuf) {
if (_request.expired() ) { break; }
Cursor &docSumC = array.addObject();
ObjectSymbolInserter inserter(docSumC, docsumSym);
- if ((docId != search::endDocId) && rci.outputClass != nullptr) {
+ if ((docId != search::endDocId) && rci.res_class != nullptr) {
_docsumWriter.insertDocsum(rci, docId, _docsumState, &_docsumStore, inserter);
}
num_ok++;