aboutsummaryrefslogtreecommitdiffstats
path: root/searchsummary
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2024-02-05 10:41:28 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2024-02-05 10:44:02 +0000
commit20e7cf51b4cc808dab3e2d10473976f04174147b (patch)
tree270332b161f90ef6b88c3da6bdcdd7c6f6855635 /searchsummary
parentb2fc8e4051afa7c5398ba198f34d6141e6a07fed (diff)
- Collapse and simplify inheritance of DynamicTeaserDFW -> JuniperTeaserDFW -> JuniperDFW.
- Perform all initialization in constructor.
Diffstat (limited to 'searchsummary')
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/docsum_field_writer_factory.cpp11
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/dynamicteaserdfw.cpp54
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/dynamicteaserdfw.h41
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/juniperdfw.h63
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;
-};
-
-}
-