diff options
author | Geir Storli <geirst@yahooinc.com> | 2023-01-25 14:38:18 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-01-25 14:38:18 +0100 |
commit | 6fb49eca830e65038c0c962bd2d1dc8ecc47c160 (patch) | |
tree | a3b22ac6cf82144789c463e98f66e0c8cc63e769 /searchsummary | |
parent | 601d09256ea213a4d1238ffe1526bedbcb42b295 (diff) | |
parent | c5cdd3c1f79c35c2715653f5658afa1bae79040b (diff) |
Merge pull request #25721 from vespa-engine/toregge/bind-juniper-query-to-input-field
Bind juniper query to input field.
Diffstat (limited to 'searchsummary')
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); } |