diff options
Diffstat (limited to 'streamingvisitors')
-rw-r--r-- | streamingvisitors/src/vespa/searchvisitor/searchvisitor.cpp | 15 | ||||
-rw-r--r-- | streamingvisitors/src/vespa/searchvisitor/searchvisitor.h | 4 |
2 files changed, 16 insertions, 3 deletions
diff --git a/streamingvisitors/src/vespa/searchvisitor/searchvisitor.cpp b/streamingvisitors/src/vespa/searchvisitor/searchvisitor.cpp index b04f09ff70a..9c39d929e4c 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; |