summaryrefslogtreecommitdiffstats
path: root/searchsummary
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2022-09-01 21:55:30 +0200
committerHenning Baldersheim <balder@yahoo-inc.com>2022-09-01 22:19:25 +0200
commit1583768921c1703475458428c9faf5d88acdff27 (patch)
tree9cd27c2160acc40f92737a1edcbac50d5c32a9c1 /searchsummary
parent36bead13fbbd0b3ce5c5a364b6f07ee1d3555b9b (diff)
- Add fieldlist to docsum request.
- Only return fields requested from the backend.
Diffstat (limited to 'searchsummary')
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/docsumwriter.cpp3
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/getdocsumargs.cpp10
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/getdocsumargs.h8
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;
};
}