diff options
8 files changed, 39 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; }; diff --git a/streamingvisitors/src/vespa/vsm/vsm/docsumfilter.cpp b/streamingvisitors/src/vespa/vsm/vsm/docsumfilter.cpp index 953c7deb8a1..bc05ec72638 100644 --- a/streamingvisitors/src/vespa/vsm/vsm/docsumfilter.cpp +++ b/streamingvisitors/src/vespa/vsm/vsm/docsumfilter.cpp @@ -147,6 +147,7 @@ public: DocsumStoreVsmDocument(DocsumFilter& docsum_filter, const Document& vsm_document); ~DocsumStoreVsmDocument() 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; }; @@ -181,6 +182,13 @@ DocsumStoreVsmDocument::get_field_value(const vespalib::string& field_name) cons return {}; } +JuniperInput +DocsumStoreVsmDocument::get_juniper_input(const vespalib::string& field_name) const +{ + // Markup for juniper has already been added due to FLATTENJUNIPER command in vsm summary config. + return JuniperInput(get_field_value(field_name)); +} + void DocsumStoreVsmDocument::insert_summary_field(const vespalib::string& field_name, vespalib::slime::Inserter& inserter) const { |