summaryrefslogtreecommitdiffstats
path: root/searchsummary
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2022-09-02 13:50:48 +0200
committerGitHub <noreply@github.com>2022-09-02 13:50:48 +0200
commit64183ef92a1f8c2aa9157c2c391f230587892d3c (patch)
treed8146bccae23fc37b6292aeb0b23447b61cc52fc /searchsummary
parent377d2c5874e889c0c32cebb1f691493f6694389e (diff)
parent2e69eeead11986908979a740cd5019362322c6af (diff)
Merge pull request #23901 from vespa-engine/balder/limit-summary-fields
- Add fieldlist to docsum request.[run-systemtest]
Diffstat (limited to 'searchsummary')
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/docsumwriter.cpp3
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/dynamicteaserdfw.cpp24
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/getdocsumargs.cpp11
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/getdocsumargs.h14
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;
};
}