summaryrefslogtreecommitdiffstats
path: root/searchsummary
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@online.no>2023-01-25 12:50:10 +0100
committerTor Egge <Tor.Egge@online.no>2023-01-25 12:50:10 +0100
commitc5cdd3c1f79c35c2715653f5658afa1bae79040b (patch)
treeab04af61ae573a07de28ab8d42ad81cf195c3c2a /searchsummary
parentdb01dd9ebc4f63acc71d4ef9b015db4133a5de6d (diff)
Bind juniper query to input field.
Diffstat (limited to 'searchsummary')
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/docsumstate.cpp14
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/docsumstate.h14
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/dynamicteaserdfw.cpp9
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);
}