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 /searchcore | |
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 'searchcore')
-rw-r--r-- | searchcore/src/vespa/searchcore/proton/docsummary/docsumcontext.cpp | 7 |
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++; |