diff options
author | Tor Egge <Tor.Egge@online.no> | 2022-08-24 12:54:47 +0200 |
---|---|---|
committer | Tor Egge <Tor.Egge@online.no> | 2022-08-24 12:54:47 +0200 |
commit | 98e342fc3066d40767577f5fdb2f14c7cce9cb9c (patch) | |
tree | d17dd2360a3d066e6d3411b3ed6c737f77ef444c /searchsummary | |
parent | 26d0b997cc573bac2a1d7eda7a2494449452e121 (diff) |
Add get_juniper_input member function to IDocsumStoreDocument interface.
Diffstat (limited to 'searchsummary')
7 files changed, 31 insertions, 12 deletions
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/docsum_store_document.cpp b/searchsummary/src/vespa/searchsummary/docsummary/docsum_store_document.cpp index 71800eb2128..0a388f4de07 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/docsum_store_document.cpp +++ b/searchsummary/src/vespa/searchsummary/docsummary/docsum_store_document.cpp @@ -31,6 +31,17 @@ DocsumStoreDocument::get_field_value(const vespalib::string& field_name) const return DocsumStoreFieldValue(); } +JuniperInput +DocsumStoreDocument::get_juniper_input(const vespalib::string& field_name) const +{ + auto field_value = get_field_value(field_name); + if (field_value) { + auto field_value_with_markup = SummaryFieldConverter::convertSummaryField(true, *field_value); + return JuniperInput(DocsumStoreFieldValue(std::move(field_value_with_markup))); + } + return {}; +} + void DocsumStoreDocument::insert_summary_field(const vespalib::string& field_name, vespalib::slime::Inserter& inserter) const { diff --git a/searchsummary/src/vespa/searchsummary/docsummary/docsum_store_document.h b/searchsummary/src/vespa/searchsummary/docsummary/docsum_store_document.h index 26cccc9970f..ebc3a57d201 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/docsum_store_document.h +++ b/searchsummary/src/vespa/searchsummary/docsummary/docsum_store_document.h @@ -18,6 +18,7 @@ public: DocsumStoreDocument(std::unique_ptr<document::Document> document); ~DocsumStoreDocument() override; DocsumStoreFieldValue get_field_value(const vespalib::string& field_name) const override; + JuniperInput get_juniper_input(const vespalib::string& field_name) const override; void insert_summary_field(const vespalib::string& field_name, vespalib::slime::Inserter& inserter) const override; void insert_document_id(vespalib::slime::Inserter& inserter) const override; }; diff --git a/searchsummary/src/vespa/searchsummary/docsummary/docsum_store_field_value.h b/searchsummary/src/vespa/searchsummary/docsummary/docsum_store_field_value.h index d06a2ab8287..71d4468a1c1 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/docsum_store_field_value.h +++ b/searchsummary/src/vespa/searchsummary/docsummary/docsum_store_field_value.h @@ -28,6 +28,7 @@ public: : DocsumStoreFieldValue(nullptr) { } + DocsumStoreFieldValue(DocsumStoreFieldValue&& rhs) noexcept = default; ~DocsumStoreFieldValue() = default; const document::FieldValue& operator*() const noexcept { return *_value; } const document::FieldValue* operator->() const noexcept { return _value; } diff --git a/searchsummary/src/vespa/searchsummary/docsummary/dynamicteaserdfw.cpp b/searchsummary/src/vespa/searchsummary/docsummary/dynamicteaserdfw.cpp index 58dde39c336..667cd68e59e 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/dynamicteaserdfw.cpp +++ b/searchsummary/src/vespa/searchsummary/docsummary/dynamicteaserdfw.cpp @@ -362,9 +362,9 @@ DynamicTeaserDFW::getJuniperInput(GeneralResult *gres) { } const auto* document = gres->get_document(); if (document != nullptr) { - return JuniperInput(document->get_field_value(_input_field_name).get()); + return document->get_juniper_input(_input_field_name); } - return JuniperInput(vespalib::stringref()); + return {}; } vespalib::string diff --git a/searchsummary/src/vespa/searchsummary/docsummary/i_docsum_store_document.h b/searchsummary/src/vespa/searchsummary/docsummary/i_docsum_store_document.h index b9c2ae76e7a..a4d1d7a0097 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/i_docsum_store_document.h +++ b/searchsummary/src/vespa/searchsummary/docsummary/i_docsum_store_document.h @@ -3,6 +3,7 @@ #pragma once #include "docsum_store_field_value.h" +#include "juniper_input.h" #include <vespa/vespalib/stllike/string.h> namespace vespalib::slime { struct Inserter; } @@ -19,6 +20,7 @@ class IDocsumStoreDocument public: virtual ~IDocsumStoreDocument() = default; virtual DocsumStoreFieldValue get_field_value(const vespalib::string& field_name) const = 0; + virtual JuniperInput get_juniper_input(const vespalib::string& field_name) const = 0; virtual void insert_summary_field(const vespalib::string& field_name, vespalib::slime::Inserter& inserter) const = 0; virtual void insert_document_id(vespalib::slime::Inserter& inserter) const = 0; }; diff --git a/searchsummary/src/vespa/searchsummary/docsummary/juniper_input.cpp b/searchsummary/src/vespa/searchsummary/docsummary/juniper_input.cpp index a9f265b0842..330c12f21d8 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/juniper_input.cpp +++ b/searchsummary/src/vespa/searchsummary/docsummary/juniper_input.cpp @@ -6,21 +6,24 @@ namespace search::docsummary { +JuniperInput::JuniperInput() + : _field_value_with_markup(), + _value() +{ +} + JuniperInput::JuniperInput(vespalib::stringref value) : _field_value_with_markup(), _value(value) { } -JuniperInput::JuniperInput(const document::FieldValue* value) - : _field_value_with_markup(), +JuniperInput::JuniperInput(DocsumStoreFieldValue value) + : _field_value_with_markup(std::move(value)), _value() { - if (value != nullptr) { - _field_value_with_markup = SummaryFieldConverter::convertSummaryField(true, *value); - } if (_field_value_with_markup && _field_value_with_markup->isA(document::FieldValue::Type::STRING)) { - const auto& string_field_value_with_markup = static_cast<document::StringFieldValue&>(*_field_value_with_markup); + const auto& string_field_value_with_markup = static_cast<const document::StringFieldValue&>(*_field_value_with_markup); _value = string_field_value_with_markup.getValueRef(); } } diff --git a/searchsummary/src/vespa/searchsummary/docsummary/juniper_input.h b/searchsummary/src/vespa/searchsummary/docsummary/juniper_input.h index b9c3ee169e6..c3c1572909b 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/juniper_input.h +++ b/searchsummary/src/vespa/searchsummary/docsummary/juniper_input.h @@ -2,8 +2,8 @@ #pragma once +#include "docsum_store_field_value.h" #include <vespa/vespalib/stllike/string.h> -#include <memory> namespace document { class FieldValue; } @@ -13,11 +13,12 @@ namespace search::docsummary { * Class containing input for juniper processing. */ class JuniperInput { - std::unique_ptr<document::FieldValue> _field_value_with_markup; + DocsumStoreFieldValue _field_value_with_markup; vespalib::stringref _value; public: - JuniperInput(vespalib::stringref value); - JuniperInput(const document::FieldValue* value); + JuniperInput(); + explicit JuniperInput(vespalib::stringref value); + explicit JuniperInput(DocsumStoreFieldValue value); ~JuniperInput(); bool empty() const noexcept { return _value.empty(); } vespalib::stringref get_value() const noexcept { return _value; }; |