From e529812763b6c4efe2b8dbd9b4b87f581d7bec7a Mon Sep 17 00:00:00 2001 From: Tor Egge Date: Thu, 5 Jan 2023 15:54:29 +0100 Subject: Add interface class IKeywordExtractorFactory. Move ownership of IKeywordExtractor to JuniperDFW. --- .../vespa/vsm/vsm/docsum_field_writer_factory.cpp | 5 +++-- .../src/vespa/vsm/vsm/docsum_field_writer_factory.h | 2 +- streamingvisitors/src/vespa/vsm/vsm/vsm-adapter.cpp | 21 +++++++++++++-------- 3 files changed, 17 insertions(+), 11 deletions(-) (limited to 'streamingvisitors') diff --git a/streamingvisitors/src/vespa/vsm/vsm/docsum_field_writer_factory.cpp b/streamingvisitors/src/vespa/vsm/vsm/docsum_field_writer_factory.cpp index eaef0846536..f3c383a4ba5 100644 --- a/streamingvisitors/src/vespa/vsm/vsm/docsum_field_writer_factory.cpp +++ b/streamingvisitors/src/vespa/vsm/vsm/docsum_field_writer_factory.cpp @@ -14,6 +14,7 @@ using search::docsummary::CopyDFW; using search::docsummary::DocsumFieldWriter; using search::docsummary::EmptyDFW; using search::docsummary::IDocsumEnvironment; +using search::docsummary::IKeywordExtractorFactory; using search::docsummary::MatchedElementsFilterDFW; using vespa::config::search::vsm::VsmfieldsConfig; @@ -36,8 +37,8 @@ void populate_fields(MatchingElementsFields& fields, VsmfieldsConfig& fields_con } -DocsumFieldWriterFactory::DocsumFieldWriterFactory(bool use_v8_geo_positions, const IDocsumEnvironment& env, const vespa::config::search::vsm::VsmfieldsConfig& vsm_fields_config) - : search::docsummary::DocsumFieldWriterFactory(use_v8_geo_positions, env), +DocsumFieldWriterFactory::DocsumFieldWriterFactory(bool use_v8_geo_positions, const IDocsumEnvironment& env, const IKeywordExtractorFactory& keyword_extractor_factory, const vespa::config::search::vsm::VsmfieldsConfig& vsm_fields_config) + : search::docsummary::DocsumFieldWriterFactory(use_v8_geo_positions, env, keyword_extractor_factory), _vsm_fields_config(vsm_fields_config) { } diff --git a/streamingvisitors/src/vespa/vsm/vsm/docsum_field_writer_factory.h b/streamingvisitors/src/vespa/vsm/vsm/docsum_field_writer_factory.h index 17c270292e2..81acd0c7668 100644 --- a/streamingvisitors/src/vespa/vsm/vsm/docsum_field_writer_factory.h +++ b/streamingvisitors/src/vespa/vsm/vsm/docsum_field_writer_factory.h @@ -16,7 +16,7 @@ class DocsumFieldWriterFactory : public search::docsummary::DocsumFieldWriterFac const vespa::config::search::vsm::VsmfieldsConfig& _vsm_fields_config; public: - DocsumFieldWriterFactory(bool use_v8_geo_positions, const search::docsummary::IDocsumEnvironment& env, const vespa::config::search::vsm::VsmfieldsConfig& vsm_fields_config); + DocsumFieldWriterFactory(bool use_v8_geo_positions, const search::docsummary::IDocsumEnvironment& env, const search::docsummary::IKeywordExtractorFactory& keyword_extractor_factory, const vespa::config::search::vsm::VsmfieldsConfig& vsm_fields_config); ~DocsumFieldWriterFactory() override; std::unique_ptr create_docsum_field_writer(const vespalib::string& field_name, diff --git a/streamingvisitors/src/vespa/vsm/vsm/vsm-adapter.cpp b/streamingvisitors/src/vespa/vsm/vsm/vsm-adapter.cpp index 563eda2249c..cbe3f622770 100644 --- a/streamingvisitors/src/vespa/vsm/vsm/vsm-adapter.cpp +++ b/streamingvisitors/src/vespa/vsm/vsm/vsm-adapter.cpp @@ -5,13 +5,16 @@ #include "i_matching_elements_filler.h" #include #include +#include #include #include LOG_SETUP(".vsm.vsm-adapter"); +using search::docsummary::IKeywordExtractorFactory; using search::docsummary::ResConfigEntry; using search::docsummary::KeywordExtractor; +using search::docsummary::LegacyKeywordExtractorFactory; using search::MatchingElements; using config::ConfigSnapshot; using vespa::config::search::SummaryConfig; @@ -144,22 +147,24 @@ VSMAdapter::configure(const VSMConfigSnapshot & snapshot) auto juniper = std::make_unique(_juniperProps.get(), &_wordFolder); docsumTools->setJuniper(std::move(juniper)); + // init keyword extractor + auto kwExtractor = std::make_unique(); + kwExtractor->addLegalIndexSpec(_highlightindexes.c_str()); + vespalib::string spec = kwExtractor->getLegalIndexSpec(); + LOG(debug, "index highlight spec: '%s'", spec.c_str()); + // init result config auto resCfg = std::make_unique(); - auto docsum_field_writer_factory = std::make_unique(summary.get()->usev8geopositions, *docsumTools, *_fieldsCfg.get()); + std::unique_ptr keyword_extractor_factory = std::make_unique(std::move(kwExtractor)); + auto docsum_field_writer_factory = std::make_unique(summary.get()->usev8geopositions, *docsumTools, *keyword_extractor_factory, *_fieldsCfg.get()); if ( !resCfg->readConfig(*summary.get(), _configId.c_str(), *docsum_field_writer_factory)) { throw std::runtime_error("(re-)configuration of VSM (docsum tools) failed due to bad summary config"); } docsum_field_writer_factory.reset(); - - // init keyword extractor - auto kwExtractor = std::make_unique(); - kwExtractor->addLegalIndexSpec(_highlightindexes.c_str()); - vespalib::string spec = kwExtractor->getLegalIndexSpec(); - LOG(debug, "index highlight spec: '%s'", spec.c_str()); + keyword_extractor_factory.reset(); // create dynamic docsum writer - auto writer = std::make_unique(std::move(resCfg), std::move(kwExtractor)); + auto writer = std::make_unique(std::move(resCfg)); docsumTools->set_writer(std::move(writer)); // configure new docsum tools -- cgit v1.2.3