diff options
author | Tor Egge <Tor.Egge@online.no> | 2023-01-25 12:50:10 +0100 |
---|---|---|
committer | Tor Egge <Tor.Egge@online.no> | 2023-01-25 12:50:10 +0100 |
commit | c5cdd3c1f79c35c2715653f5658afa1bae79040b (patch) | |
tree | ab04af61ae573a07de28ab8d42ad81cf195c3c2a /searchsummary/src | |
parent | db01dd9ebc4f63acc71d4ef9b015db4133a5de6d (diff) |
Bind juniper query to input field.
Diffstat (limited to 'searchsummary/src')
3 files changed, 28 insertions, 9 deletions
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/docsumstate.cpp b/searchsummary/src/vespa/searchsummary/docsummary/docsumstate.cpp index 2f9f47ed7b7..db4ac0f32b0 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/docsumstate.cpp +++ b/searchsummary/src/vespa/searchsummary/docsummary/docsumstate.cpp @@ -12,6 +12,7 @@ #include <vespa/searchlib/common/matching_elements.h> #include <vespa/searchlib/parsequery/parse.h> #include <vespa/searchlib/parsequery/stackdumpiterator.h> +#include <vespa/vespalib/stllike/hash_map.hpp> #include <vespa/vespalib/util/issue.h> using search::common::GeoLocationParser; @@ -20,6 +21,19 @@ using vespalib::Issue; namespace search::docsummary { +GetDocsumsState::DynTeaserState::DynTeaserState() + : _queries() +{ +} + +GetDocsumsState::DynTeaserState::~DynTeaserState() = default; + +std::unique_ptr<juniper::QueryHandle>& +GetDocsumsState::DynTeaserState::get_query(vespalib::stringref field) +{ + return _queries[field]; +} + GetDocsumsState::GetDocsumsState(GetDocsumsStateCallback &callback) : _args(), _docsumbuf(), diff --git a/searchsummary/src/vespa/searchsummary/docsummary/docsumstate.h b/searchsummary/src/vespa/searchsummary/docsummary/docsumstate.h index 0aa77b7c71b..2c644a243c8 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/docsumstate.h +++ b/searchsummary/src/vespa/searchsummary/docsummary/docsumstate.h @@ -5,6 +5,7 @@ #include "getdocsumargs.h" #include <vespa/searchlib/common/featureset.h> #include <vespa/searchlib/common/geo_location_spec.h> +#include <vespa/vespalib/stllike/hash_map.h> #include <vespa/vespalib/util/stash.h> namespace juniper { @@ -54,11 +55,14 @@ public: GetDocsumsStateCallback &_callback; - struct DynTeaserState { - std::unique_ptr<juniper::QueryHandle> _query; // juniper query representation - } _dynteaser; - - + class DynTeaserState { + vespalib::hash_map<vespalib::string, std::unique_ptr<juniper::QueryHandle>> _queries; // juniper query representations + public: + DynTeaserState(); + ~DynTeaserState(); + std::unique_ptr<juniper::QueryHandle>& get_query(vespalib::stringref field); + }; + DynTeaserState _dynteaser; std::unique_ptr<search::attribute::IAttributeContext> _attrCtx; std::vector<const search::attribute::IAttributeVector *> _attributes; private: diff --git a/searchsummary/src/vespa/searchsummary/docsummary/dynamicteaserdfw.cpp b/searchsummary/src/vespa/searchsummary/docsummary/dynamicteaserdfw.cpp index 78324fa4eaa..3dfcc419408 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/dynamicteaserdfw.cpp +++ b/searchsummary/src/vespa/searchsummary/docsummary/dynamicteaserdfw.cpp @@ -60,11 +60,12 @@ JuniperTeaserDFW::Init( void DynamicTeaserDFW::insert_juniper_field(uint32_t docid, vespalib::stringref input, GetDocsumsState& state, vespalib::slime::Inserter& inserter) const { - if (!state._dynteaser._query) { + auto& query = state._dynteaser.get_query(_input_field_name); + if (!query) { JuniperQueryAdapter iq(_keyword_extractor.get(), state._args.getStackDump(), &state._args.highlightTerms()); - state._dynteaser._query = _juniper->CreateQueryHandle(iq, nullptr); + query = _juniper->CreateQueryHandle(iq, nullptr); } LOG(debug, "makeDynamicTeaser: docid (%d)", @@ -72,7 +73,7 @@ DynamicTeaserDFW::insert_juniper_field(uint32_t docid, vespalib::stringref input std::unique_ptr<juniper::Result> result; - if (state._dynteaser._query != nullptr) { + if (query) { if (LOG_WOULD_LOG(spam)) { std::ostringstream hexDump; @@ -83,7 +84,7 @@ DynamicTeaserDFW::insert_juniper_field(uint32_t docid, vespalib::stringref input auto langid = static_cast<uint32_t>(-1); - result = juniper::Analyse(*_juniperConfig, *state._dynteaser._query, + result = juniper::Analyse(*_juniperConfig, *query, input.data(), input.length(), docid, langid); } |