diff options
Diffstat (limited to 'searchlib')
-rw-r--r-- | searchlib/src/vespa/searchlib/features/fieldmatchfeature.cpp | 60 | ||||
-rw-r--r-- | searchlib/src/vespa/searchlib/features/fieldmatchfeature.h | 1 |
2 files changed, 20 insertions, 41 deletions
diff --git a/searchlib/src/vespa/searchlib/features/fieldmatchfeature.cpp b/searchlib/src/vespa/searchlib/features/fieldmatchfeature.cpp index 127a6c9cd28..9e4aa0d96ab 100644 --- a/searchlib/src/vespa/searchlib/features/fieldmatchfeature.cpp +++ b/searchlib/src/vespa/searchlib/features/fieldmatchfeature.cpp @@ -18,50 +18,35 @@ using CollectionType = FieldInfo::CollectionType; namespace search::features { -class FieldMatchExecutorSharedState : public Anything { -private: - PhraseSplitterQueryEnv _splitter_env; - fieldmatch::ComputerSharedState _cmp_shared_state; -public: - FieldMatchExecutorSharedState(const fef::IQueryEnvironment& query_env, - const fef::FieldInfo& field, - const fieldmatch::Params& params); - ~FieldMatchExecutorSharedState() override; - const PhraseSplitterQueryEnv& get_phrase_splitter_query_env() const { return _splitter_env; } - const fieldmatch::ComputerSharedState &get_computer_shared_state() const { return _cmp_shared_state; } -}; - -FieldMatchExecutorSharedState::FieldMatchExecutorSharedState(const IQueryEnvironment& query_env, - const FieldInfo& field, - const fieldmatch::Params& params) - : Anything(), - _splitter_env(query_env, field.id()), - _cmp_shared_state(vespalib::make_string("fieldMatch(%s)", field.name().c_str()), _splitter_env, field, params) -{ - // empty -} - -FieldMatchExecutorSharedState::~FieldMatchExecutorSharedState() = default; - /** * Implements the executor for THE field match feature. */ class FieldMatchExecutor : public fef::FeatureExecutor { private: + PhraseSplitterQueryEnv _splitter_env; fef::PhraseSplitter _splitter; + const fef::FieldInfo & _field; + fieldmatch::ComputerSharedState _cmp_shared_state; fieldmatch::Computer _cmp; void handle_bind_match_data(const fef::MatchData &md) override; public: - FieldMatchExecutor(const FieldMatchExecutorSharedState& shared_state); + FieldMatchExecutor(const fef::IQueryEnvironment & queryEnv, + const fef::FieldInfo & field, + const fieldmatch::Params & params); void execute(uint32_t docId) override; }; -FieldMatchExecutor::FieldMatchExecutor(const FieldMatchExecutorSharedState& shared_state) - : FeatureExecutor(), - _splitter(shared_state.get_phrase_splitter_query_env()), - _cmp(shared_state.get_computer_shared_state(), _splitter) +FieldMatchExecutor::FieldMatchExecutor(const IQueryEnvironment & queryEnv, + const FieldInfo & field, + [[maybe_unused]] const fieldmatch::Params & params) : + FeatureExecutor(), + _splitter_env(queryEnv, field.id()), + _splitter(_splitter_env), + _field(field), + _cmp_shared_state(vespalib::make_string("fieldMatch(%s)", _field.name().c_str()), _splitter_env, field, params), + _cmp(_cmp_shared_state, _splitter) { // empty } @@ -133,7 +118,6 @@ FieldMatchExecutor::handle_bind_match_data(const fef::MatchData &md) FieldMatchBlueprint::FieldMatchBlueprint() : Blueprint("fieldMatch"), _field(nullptr), - _shared_state_key(), _params() { } @@ -205,7 +189,6 @@ FieldMatchBlueprint::setup(const IIndexEnvironment & env, const ParameterList & params) { _field = params[0].asField(); - _shared_state_key = "fef.fieldmatch." + _field->name(); const Properties & lst = env.getProperties(); Property obj; @@ -343,17 +326,14 @@ FieldMatchBlueprint::setup(const IIndexEnvironment & env, FeatureExecutor & FieldMatchBlueprint::createExecutor(const IQueryEnvironment & env, vespalib::Stash &stash) const { - auto *shared_state = dynamic_cast<const FieldMatchExecutorSharedState *>(env.getObjectStore().get(_shared_state_key)); - if (shared_state == nullptr) { - shared_state = &stash.create<FieldMatchExecutorSharedState>(env, *_field, _params); - } - return stash.create<FieldMatchExecutor>(*shared_state); + return stash.create<FieldMatchExecutor>(env, *_field, _params); } void FieldMatchBlueprint::prepareSharedState(const IQueryEnvironment &env, IObjectStore & store) const { - if (store.get(_shared_state_key) == nullptr) { - store.add(_shared_state_key, std::make_unique<FieldMatchExecutorSharedState>(env, *_field, _params)); - } + (void) env; + (void) store; + //TODO WE need too extract the const and costly parts from PhraseSpiltter and Computer + // and initialize it here for later reuse in the multiple search threads. } } diff --git a/searchlib/src/vespa/searchlib/features/fieldmatchfeature.h b/searchlib/src/vespa/searchlib/features/fieldmatchfeature.h index f203574e588..0e5f873005d 100644 --- a/searchlib/src/vespa/searchlib/features/fieldmatchfeature.h +++ b/searchlib/src/vespa/searchlib/features/fieldmatchfeature.h @@ -13,7 +13,6 @@ namespace search::features { class FieldMatchBlueprint : public fef::Blueprint { private: const fef::FieldInfo * _field; - vespalib::string _shared_state_key; fieldmatch::Params _params; public: |