diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2022-09-01 21:55:30 +0200 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2022-09-01 22:19:25 +0200 |
commit | 1583768921c1703475458428c9faf5d88acdff27 (patch) | |
tree | 9cd27c2160acc40f92737a1edcbac50d5c32a9c1 /searchsummary | |
parent | 36bead13fbbd0b3ce5c5a364b6f07ee1d3555b9b (diff) |
- Add fieldlist to docsum request.
- Only return fields requested from the backend.
Diffstat (limited to 'searchsummary')
3 files changed, 16 insertions, 5 deletions
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/docsumwriter.cpp b/searchsummary/src/vespa/searchsummary/docsummary/docsumwriter.cpp index 18371970722..7e97116a62d 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/docsumwriter.cpp +++ b/searchsummary/src/vespa/searchsummary/docsummary/docsumwriter.cpp @@ -61,7 +61,7 @@ DynamicDocsumWriter::insertDocsum(const ResolveClassInfo & rci, uint32_t docid, for (uint32_t i = 0; i < rci.outputClass->GetNumEntries(); ++i) { const ResConfigEntry *resCfg = rci.outputClass->GetEntry(i); const DocsumFieldWriter *writer = _overrideTable[resCfg->_enumValue].get(); - if (! writer->isDefaultValue(docid, state)) { + if (state->_args.needField(resCfg->_bindname) && ! writer->isDefaultValue(docid, state)) { const Memory field_name(resCfg->_bindname.data(), resCfg->_bindname.size()); ObjectInserter inserter(docsum, field_name); writer->insertField(docid, nullptr, state, resCfg->_type, inserter); @@ -77,6 +77,7 @@ DynamicDocsumWriter::insertDocsum(const ResolveClassInfo & rci, uint32_t docid, vespalib::slime::Cursor & docsum = topInserter.insertObject(); for (uint32_t i = 0; i < rci.outputClass->GetNumEntries(); ++i) { const ResConfigEntry *outCfg = rci.outputClass->GetEntry(i); + if ( ! state->_args.needField(outCfg->_bindname)) continue; const DocsumFieldWriter *writer = _overrideTable[outCfg->_enumValue].get(); const Memory field_name(outCfg->_bindname.data(), outCfg->_bindname.size()); ObjectInserter inserter(docsum, field_name); diff --git a/searchsummary/src/vespa/searchsummary/docsummary/getdocsumargs.cpp b/searchsummary/src/vespa/searchsummary/docsummary/getdocsumargs.cpp index af0bd5fd884..dc9de0c6f35 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/getdocsumargs.cpp +++ b/searchsummary/src/vespa/searchsummary/docsummary/getdocsumargs.cpp @@ -1,6 +1,7 @@ // Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #include "getdocsumargs.h" +#include <vespa/vespalib/stllike/hash_set_insert.hpp> namespace search::docsummary { @@ -11,7 +12,8 @@ GetDocsumArgs::GetDocsumArgs() _stackDump(), _location(), _timeout(30s), - _highlightTerms() + _highlightTerms(), + _fields() { } @@ -27,6 +29,7 @@ GetDocsumArgs::initFromDocsumRequest(const engine::DocsumRequest &req) _locations_possible = true; _timeout = req.getTimeLeft(); _highlightTerms = req.propertiesMap.highlightTerms(); + _fields = FieldSet(req.getFields().begin(), req.getFields().end()); } void @@ -36,4 +39,9 @@ GetDocsumArgs::SetStackDump(uint32_t stackDumpLen, const char *stackDump) memcpy(&_stackDump[0], stackDump, _stackDump.size()); } +bool +GetDocsumArgs::needField(vespalib::stringref field) const { + return _fields.empty() || _fields.contains(field); +} + } diff --git a/searchsummary/src/vespa/searchsummary/docsummary/getdocsumargs.h b/searchsummary/src/vespa/searchsummary/docsummary/getdocsumargs.h index 7c346a4b9bb..e973c76253d 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/getdocsumargs.h +++ b/searchsummary/src/vespa/searchsummary/docsummary/getdocsumargs.h @@ -4,12 +4,14 @@ #include <vespa/searchlib/fef/properties.h> #include <vespa/searchlib/engine/docsumrequest.h> +#include <vespa/vespalib/stllike/hash_set.h> namespace search::docsummary { class GetDocsumArgs { private: + using FieldSet = vespalib::hash_set<vespalib::string>; vespalib::string _resultClassName; bool _dumpFeatures; bool _locations_possible; @@ -17,6 +19,7 @@ private: vespalib::string _location; vespalib::duration _timeout; fef::Properties _highlightTerms; + FieldSet _fields; public: GetDocsumArgs(); ~GetDocsumArgs(); @@ -40,9 +43,8 @@ public: void dumpFeatures(bool v) { _dumpFeatures = v; } bool dumpFeatures() const { return _dumpFeatures; } - const fef::Properties &highlightTerms() const { - return _highlightTerms; - } + const fef::Properties &highlightTerms() const { return _highlightTerms; } + bool needField(vespalib::stringref field) const; }; } |