summaryrefslogtreecommitdiffstats
path: root/streamingvisitors
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2022-09-02 16:38:32 +0200
committerGitHub <noreply@github.com>2022-09-02 16:38:32 +0200
commite3ee4675463c373d699f6f31479d171868bcfc7e (patch)
treed1e2e44f3b5244cce024196ae0ef1045305ffaa0 /streamingvisitors
parent37f0d3a64511b0dd0d902053be3a6cffc21acee6 (diff)
parent84d36247026420bde80c60517f0a1d55e56de698 (diff)
Merge pull request #23908 from vespa-engine/balder/wire-in-summary-fields-for-streaming-too
Balder/wire in summary fields for streaming too
Diffstat (limited to 'streamingvisitors')
-rw-r--r--streamingvisitors/src/vespa/searchvisitor/searchvisitor.cpp15
-rw-r--r--streamingvisitors/src/vespa/searchvisitor/searchvisitor.h4
2 files changed, 16 insertions, 3 deletions
diff --git a/streamingvisitors/src/vespa/searchvisitor/searchvisitor.cpp b/streamingvisitors/src/vespa/searchvisitor/searchvisitor.cpp
index b84f63e27cf..0bf41f9a379 100644
--- a/streamingvisitors/src/vespa/searchvisitor/searchvisitor.cpp
+++ b/streamingvisitors/src/vespa/searchvisitor/searchvisitor.cpp
@@ -20,6 +20,7 @@
#include <vespa/vespalib/util/exceptions.h>
#include <vespa/vespalib/util/size_literals.h>
#include <vespa/vespalib/data/slime/slime.h>
+#include <vespa/vespalib/text/stringtokenizer.h>
#include <vespa/fnet/databuffer.h>
#include <vespa/log/log.h>
@@ -125,6 +126,7 @@ SearchVisitor::SummaryGenerator::SummaryGenerator(const search::IAttributeManage
: HitsAggregationResult::SummaryGenerator(),
_callback(),
_docsum_states(),
+ _summaryFields(),
_docsumFilter(),
_docsumWriter(nullptr),
_buf(4_Ki),
@@ -138,8 +140,7 @@ SearchVisitor::SummaryGenerator::SummaryGenerator(const search::IAttributeManage
SearchVisitor::SummaryGenerator::~SummaryGenerator() = default;
SearchVisitor::StreamingDocsumsState&
-SearchVisitor::SummaryGenerator::get_streaming_docsums_state(const vespalib::string& summary_class)
-{
+SearchVisitor::SummaryGenerator::get_streaming_docsums_state(const vespalib::string& summary_class) {
auto itr = _docsum_states.find(summary_class);
if (itr != _docsum_states.end()) {
return *itr->second;
@@ -148,6 +149,9 @@ SearchVisitor::SummaryGenerator::get_streaming_docsums_state(const vespalib::str
auto state = std::make_unique<StreamingDocsumsState>(_callback, rci);
auto &ds = state->get_state();
ds._args.setResultClassName(summary_class);
+ for (const auto &field: _summaryFields) {
+ ds._args.add_field(field);
+ }
if (_dump_features.has_value()) {
ds._args.dumpFeatures(_dump_features.value());
}
@@ -263,6 +267,13 @@ void SearchVisitor::init(const Parameters & params)
_summaryClass = vespalib::string(valueRef.data(), valueRef.size());
LOG(debug, "Received summary class: %s", _summaryClass.c_str());
}
+ if ( params.lookup("summary-fields", valueRef) ) {
+ vespalib::StringTokenizer fieldTokenizer(valueRef, " ");
+ for (const auto & field : fieldTokenizer) {
+ _summaryGenerator.add_summary_field(field);
+ LOG(debug, "Received field: %s", vespalib::string(field).c_str());
+ }
+ }
size_t wantedSummaryCount(10);
if (params.lookup("summarycount", valueRef) ) {
diff --git a/streamingvisitors/src/vespa/searchvisitor/searchvisitor.h b/streamingvisitors/src/vespa/searchvisitor/searchvisitor.h
index 37ec6352b5a..7dbf1cd521b 100644
--- a/streamingvisitors/src/vespa/searchvisitor/searchvisitor.h
+++ b/streamingvisitors/src/vespa/searchvisitor/searchvisitor.h
@@ -398,7 +398,7 @@ private:
class SummaryGenerator : public HitsAggregationResult::SummaryGenerator
{
public:
- SummaryGenerator(const search::IAttributeManager& attr_manager);
+ explicit SummaryGenerator(const search::IAttributeManager& attr_manager);
~SummaryGenerator() override;
vsm::GetDocsumsStateCallback & getDocsumCallback() { return _callback; }
void setFilter(std::unique_ptr<vsm::DocsumFilter> filter) { _docsumFilter = std::move(filter); }
@@ -408,10 +408,12 @@ private:
void set_dump_features(bool dump_features) { _dump_features = dump_features; }
void set_location(const vespalib::string& location) { _location = location; }
void set_stack_dump(std::vector<char> stack_dump) { _stack_dump = std::move(stack_dump); }
+ void add_summary_field(vespalib::stringref field) { _summaryFields.emplace_back(field); }
private:
StreamingDocsumsState& get_streaming_docsums_state(const vespalib::string& summary_class);
vsm::GetDocsumsStateCallback _callback;
vespalib::hash_map<vespalib::string, std::unique_ptr<StreamingDocsumsState>> _docsum_states;
+ std::vector<vespalib::string> _summaryFields;
std::unique_ptr<vsm::DocsumFilter> _docsumFilter;
search::docsummary::IDocsumWriter * _docsumWriter;
vespalib::SmartBuffer _buf;