diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2024-02-05 10:41:28 +0000 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2024-02-05 10:44:02 +0000 |
commit | 20e7cf51b4cc808dab3e2d10473976f04174147b (patch) | |
tree | 270332b161f90ef6b88c3da6bdcdd7c6f6855635 /searchsummary | |
parent | b2fc8e4051afa7c5398ba198f34d6141e6a07fed (diff) |
- Collapse and simplify inheritance of DynamicTeaserDFW -> JuniperTeaserDFW -> JuniperDFW.
- Perform all initialization in constructor.
Diffstat (limited to 'searchsummary')
4 files changed, 58 insertions, 111 deletions
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<DocsumFieldWriter>& 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<DocsumFieldWriter> fieldWriter; if (command == command::dynamic_teaser) { if ( ! source.empty() ) { - auto fw = std::make_unique<DynamicTeaserDFW>(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<DynamicTeaserDFW>(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 <vespa/juniper/config.h> #include <vespa/juniper/result.h> #include <vespa/vespalib/data/slime/inserter.h> +#include <vespa/vespalib/util/exceptions.h> #include <sstream> #include <vespa/log/log.h> @@ -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<juniper::Result> 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 <memory> + +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<juniper::Config> _juniperConfig; + std::shared_ptr<const IQueryTermFilter> _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 <memory> - -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<juniper::Config> _juniperConfig; - const juniper::Juniper *_juniper; - std::shared_ptr<const IQueryTermFilter> _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; -}; - -} - |