From 20e7cf51b4cc808dab3e2d10473976f04174147b Mon Sep 17 00:00:00 2001 From: Henning Baldersheim Date: Mon, 5 Feb 2024 10:41:28 +0000 Subject: - Collapse and simplify inheritance of DynamicTeaserDFW -> JuniperTeaserDFW -> JuniperDFW. - Perform all initialization in constructor. --- .../docsummary/docsum_field_writer_factory.cpp | 11 ++-- .../searchsummary/docsummary/dynamicteaserdfw.cpp | 54 +++++-------------- .../searchsummary/docsummary/dynamicteaserdfw.h | 41 ++++++++++++++ .../vespa/searchsummary/docsummary/juniperdfw.h | 63 ---------------------- 4 files changed, 58 insertions(+), 111 deletions(-) create mode 100644 searchsummary/src/vespa/searchsummary/docsummary/dynamicteaserdfw.h delete mode 100644 searchsummary/src/vespa/searchsummary/docsummary/juniperdfw.h (limited to 'searchsummary') diff --git a/searchsummary/src/vespa/searchsummary/docsummary/docsum_field_writer_factory.cpp b/searchsummary/src/vespa/searchsummary/docsummary/docsum_field_writer_factory.cpp index 28a2c34ca87..aa4a4342b0d 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/docsum_field_writer_factory.cpp +++ b/searchsummary/src/vespa/searchsummary/docsummary/docsum_field_writer_factory.cpp @@ -9,7 +9,7 @@ #include "empty_dfw.h" #include "geoposdfw.h" #include "idocsumenvironment.h" -#include "juniperdfw.h" +#include "dynamicteaserdfw.h" #include "matched_elements_filter_dfw.h" #include "positionsdfw.h" #include "rankfeaturesdfw.h" @@ -45,7 +45,7 @@ void throw_if_nullptr(const std::unique_ptr& writer, const vespalib::string& command) { - if (writer.get() == nullptr) { + if ( ! writer) { throw IllegalArgumentException("Failed to create docsum field writer for command '" + command + "'."); } } @@ -67,12 +67,7 @@ DocsumFieldWriterFactory::create_docsum_field_writer(const vespalib::string& fie std::unique_ptr fieldWriter; if (command == command::dynamic_teaser) { if ( ! source.empty() ) { - auto fw = std::make_unique(getEnvironment().getJuniper()); - auto fw_ptr = fw.get(); - fieldWriter = std::move(fw); - if (!fw_ptr->Init(field_name.c_str(), source, _query_term_filter_factory)) { - throw IllegalArgumentException("Failed to initialize DynamicTeaserDFW."); - } + fieldWriter = std::make_unique(getEnvironment().getJuniper(), field_name.c_str(), source, _query_term_filter_factory); } else { throw_missing_source(command); } diff --git a/searchsummary/src/vespa/searchsummary/docsummary/dynamicteaserdfw.cpp b/searchsummary/src/vespa/searchsummary/docsummary/dynamicteaserdfw.cpp index fcf86f70bef..7baeccbe8cb 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/dynamicteaserdfw.cpp +++ b/searchsummary/src/vespa/searchsummary/docsummary/dynamicteaserdfw.cpp @@ -1,6 +1,6 @@ // Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. -#include "juniperdfw.h" +#include "dynamicteaserdfw.h" #include "docsumstate.h" #include "i_docsum_store_document.h" #include "i_juniper_converter.h" @@ -11,6 +11,7 @@ #include #include #include +#include #include #include @@ -18,43 +19,17 @@ LOG_SETUP(".searchlib.docsummary.dynamicteaserdfw"); namespace search::docsummary { - -JuniperDFW::JuniperDFW(const juniper::Juniper * juniper) - : _input_field_name(), - _juniperConfig(), - _juniper(juniper), - _query_term_filter() -{ -} - - -JuniperDFW::~JuniperDFW() = default; - -bool -JuniperDFW::Init( - const char *fieldName, - const vespalib::string& inputField, - const IQueryTermFilterFactory& query_term_filter_factory) +DynamicTeaserDFW::~DynamicTeaserDFW() = default; +DynamicTeaserDFW::DynamicTeaserDFW(const juniper::Juniper * juniper, const char * fieldName, vespalib::stringref inputField, + const IQueryTermFilterFactory& query_term_filter_factory) + : _juniper(juniper), + _input_field_name(inputField), + _juniperConfig(juniper->CreateConfig(fieldName)), + _query_term_filter(query_term_filter_factory.make(_input_field_name)) { - bool rc = true; - _juniperConfig = _juniper->CreateConfig(fieldName); - if ( ! _juniperConfig) { - LOG(warning, "could not create juniper config for field '%s'", fieldName); - rc = false; + if (!_juniperConfig) { + throw vespalib::IllegalArgumentException("Failed to initialize DynamicTeaserDFW."); } - - _input_field_name = inputField; - _query_term_filter = query_term_filter_factory.make(_input_field_name); - return rc; -} - -bool -JuniperTeaserDFW::Init( - const char *fieldName, - const vespalib::string& inputField, - const IQueryTermFilterFactory& query_term_filter_factory) -{ - return JuniperDFW::Init(fieldName, inputField, query_term_filter_factory); } void @@ -68,8 +43,7 @@ DynamicTeaserDFW::insert_juniper_field(uint32_t docid, vespalib::stringref input query = _juniper->CreateQueryHandle(iq, nullptr); } - LOG(debug, "makeDynamicTeaser: docid (%d)", - docid); + LOG(debug, "makeDynamicTeaser: docid (%d)", docid); std::unique_ptr result; @@ -114,8 +88,8 @@ namespace { class JuniperConverter : public IJuniperConverter { const DynamicTeaserDFW& _writer; - uint32_t _doc_id; - GetDocsumsState& _state; + uint32_t _doc_id; + GetDocsumsState& _state; public: JuniperConverter(const DynamicTeaserDFW& writer, uint32_t doc_id, GetDocsumsState& state); diff --git a/searchsummary/src/vespa/searchsummary/docsummary/dynamicteaserdfw.h b/searchsummary/src/vespa/searchsummary/docsummary/dynamicteaserdfw.h new file mode 100644 index 00000000000..f5a980533fa --- /dev/null +++ b/searchsummary/src/vespa/searchsummary/docsummary/dynamicteaserdfw.h @@ -0,0 +1,41 @@ +// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. + +#pragma once + +#include "docsum_field_writer.h" +#include + +namespace juniper { + class Config; + class Juniper; +} +namespace vespalib::slime { struct Inserter; } + +namespace search::docsummary { + +class IQueryTermFilter; +class IQueryTermFilterFactory; + +class DynamicTeaserDFW : public DocsumFieldWriter +{ +public: + DynamicTeaserDFW(const DynamicTeaserDFW &) = delete; + DynamicTeaserDFW & operator = (const DynamicTeaserDFW &) = delete; + explicit DynamicTeaserDFW(const juniper::Juniper * juniper, const char *fieldName, vespalib::stringref inputField, + const IQueryTermFilterFactory& query_term_filter_factory) ; + ~DynamicTeaserDFW() override; + + bool isGenerated() const override { return false; } + void insertField(uint32_t docid, const IDocsumStoreDocument* doc, GetDocsumsState& state, + vespalib::slime::Inserter &target) const override; + void insert_juniper_field(uint32_t docid, vespalib::stringref input, GetDocsumsState& state, + vespalib::slime::Inserter& inserter) const; +private: + const juniper::Juniper *_juniper; + vespalib::string _input_field_name; + std::unique_ptr _juniperConfig; + std::shared_ptr _query_term_filter; +}; + +} + diff --git a/searchsummary/src/vespa/searchsummary/docsummary/juniperdfw.h b/searchsummary/src/vespa/searchsummary/docsummary/juniperdfw.h deleted file mode 100644 index 7085c5e6fa1..00000000000 --- a/searchsummary/src/vespa/searchsummary/docsummary/juniperdfw.h +++ /dev/null @@ -1,63 +0,0 @@ -// Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. - -#pragma once - -#include "docsum_field_writer.h" -#include - -namespace juniper { -class Config; -class Juniper; -} -namespace vespalib::slime { struct Inserter; } - -namespace search::docsummary { - -class IQueryTermFilter; -class IQueryTermFilterFactory; - -class JuniperDFW : public DocsumFieldWriter -{ -public: - virtual bool Init( - const char *fieldName, - const vespalib::string& inputField, - const IQueryTermFilterFactory& query_term_filter_factory); -protected: - explicit JuniperDFW(const juniper::Juniper * juniper); - ~JuniperDFW() override; - - vespalib::string _input_field_name; - std::unique_ptr _juniperConfig; - const juniper::Juniper *_juniper; - std::shared_ptr _query_term_filter; -private: - bool isGenerated() const override { return false; } - JuniperDFW(const JuniperDFW &); - JuniperDFW & operator=(const JuniperDFW &); -}; - - -class JuniperTeaserDFW : public JuniperDFW -{ -public: - bool Init(const char *fieldName, - const vespalib::string& inputField, - const IQueryTermFilterFactory& query_term_filter_factory) override; -protected: - explicit JuniperTeaserDFW(const juniper::Juniper * juniper) : JuniperDFW(juniper) { } -}; - - -class DynamicTeaserDFW : public JuniperTeaserDFW -{ -public: - explicit DynamicTeaserDFW(const juniper::Juniper * juniper) : JuniperTeaserDFW(juniper) { } - - void insertField(uint32_t docid, const IDocsumStoreDocument* doc, GetDocsumsState& state, - vespalib::slime::Inserter &target) const override; - void insert_juniper_field(uint32_t docid, vespalib::stringref input, GetDocsumsState& state, vespalib::slime::Inserter& inserter) const; -}; - -} - -- cgit v1.2.3