diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2022-09-02 13:50:48 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-09-02 13:50:48 +0200 |
commit | 64183ef92a1f8c2aa9157c2c391f230587892d3c (patch) | |
tree | d8146bccae23fc37b6292aeb0b23447b61cc52fc /searchsummary | |
parent | 377d2c5874e889c0c32cebb1f691493f6694389e (diff) | |
parent | 2e69eeead11986908979a740cd5019362322c6af (diff) |
Merge pull request #23901 from vespa-engine/balder/limit-summary-fields
- Add fieldlist to docsum request.[run-systemtest]
Diffstat (limited to 'searchsummary')
4 files changed, 32 insertions, 20 deletions
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/docsumwriter.cpp b/searchsummary/src/vespa/searchsummary/docsummary/docsumwriter.cpp index 940170b54f7..89de20b6a81 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/dynamicteaserdfw.cpp b/searchsummary/src/vespa/searchsummary/docsummary/dynamicteaserdfw.cpp index 957f49c0f86..df5ce032acd 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/dynamicteaserdfw.cpp +++ b/searchsummary/src/vespa/searchsummary/docsummary/dynamicteaserdfw.cpp @@ -42,11 +42,10 @@ struct QueryItem search::SimpleQueryStackDumpIterator *_si; const ExplicitItemData *_data; QueryItem() : _si(nullptr), _data(nullptr) {} - QueryItem(search::SimpleQueryStackDumpIterator *si) : _si(si), _data(nullptr) {} - QueryItem(ExplicitItemData *data) : _si(nullptr), _data(data) {} -private: - QueryItem(const QueryItem&); - QueryItem& operator= (const QueryItem&); + explicit QueryItem(search::SimpleQueryStackDumpIterator *si) : _si(si), _data(nullptr) {} + explicit QueryItem(ExplicitItemData *data) : _si(nullptr), _data(data) {} + QueryItem(const QueryItem&) = delete; + QueryItem& operator= (const QueryItem&) = delete; }; } @@ -57,10 +56,11 @@ public: juniper::IQueryVisitor *_visitor; juniper::QueryItem _item; - TermVisitor(juniper::IQueryVisitor *visitor) : - _visitor(visitor), _item() {} - - virtual void visitProperty(const Property::Value &key, const Property &values) override; + explicit TermVisitor(juniper::IQueryVisitor *visitor) + : _visitor(visitor), + _item() + {} + void visitProperty(const Property::Value &key, const Property &values) override; }; @@ -303,7 +303,7 @@ JuniperDFW::Init( { bool rc = true; _juniperConfig = _juniper->CreateConfig(fieldName); - if (_juniperConfig.get() == nullptr) { + if ( ! _juniperConfig) { LOG(warning, "could not create juniper config for field '%s'", fieldName); rc = false; } @@ -365,9 +365,9 @@ DynamicTeaserDFW::makeDynamicTeaser(uint32_t docid, vespalib::stringref input, G } if (teaser != nullptr) { - return vespalib::string(teaser->Text(), teaser->Length()); + return {teaser->Text(), teaser->Length()}; } else { - return vespalib::string(); + return {}; } } diff --git a/searchsummary/src/vespa/searchsummary/docsummary/getdocsumargs.cpp b/searchsummary/src/vespa/searchsummary/docsummary/getdocsumargs.cpp index af0bd5fd884..739a6fae548 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,10 +12,10 @@ GetDocsumArgs::GetDocsumArgs() _stackDump(), _location(), _timeout(30s), - _highlightTerms() + _highlightTerms(), + _fields() { } - GetDocsumArgs::~GetDocsumArgs() = default; void @@ -27,6 +28,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 +38,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..ff410fb298c 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,8 +19,11 @@ private: vespalib::string _location; vespalib::duration _timeout; fef::Properties _highlightTerms; + FieldSet _fields; public: GetDocsumArgs(); + GetDocsumArgs(const GetDocsumArgs &) = delete; + GetDocsumArgs & operator=(const GetDocsumArgs &) = delete; ~GetDocsumArgs(); void initFromDocsumRequest(const search::engine::DocsumRequest &req); @@ -33,16 +38,15 @@ public: vespalib::duration getTimeout() const { return _timeout; } const vespalib::string & getResultClassName() const { return _resultClassName; } - const vespalib::stringref getStackDump() const { - return vespalib::stringref(&_stackDump[0], _stackDump.size()); + vespalib::stringref getStackDump() const { + return {&_stackDump[0], _stackDump.size()}; } 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; }; } |