aboutsummaryrefslogtreecommitdiffstats
path: root/streamingvisitors/src
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@online.no>2022-09-16 11:43:00 +0200
committerTor Egge <Tor.Egge@online.no>2022-09-16 11:43:00 +0200
commit681e43fc3dcbd6abed8a77242382a873fcd5cf68 (patch)
tree1eeb26317b658e1fe05543428000d41827e4159c /streamingvisitors/src
parent190678af7f110f1b69d58892934d6f054467b0a3 (diff)
Factor out IStringFieldConverter from IJuniperConverter.
Diffstat (limited to 'streamingvisitors/src')
-rw-r--r--streamingvisitors/src/vespa/vsm/vsm/docsumfilter.cpp51
1 files changed, 23 insertions, 28 deletions
diff --git a/streamingvisitors/src/vespa/vsm/vsm/docsumfilter.cpp b/streamingvisitors/src/vespa/vsm/vsm/docsumfilter.cpp
index 253ac33c909..ca1de0082f0 100644
--- a/streamingvisitors/src/vespa/vsm/vsm/docsumfilter.cpp
+++ b/streamingvisitors/src/vespa/vsm/vsm/docsumfilter.cpp
@@ -6,6 +6,7 @@
#include <vespa/searchsummary/docsummary/check_undefined_value_visitor.h>
#include <vespa/searchsummary/docsummary/i_docsum_store_document.h>
#include <vespa/searchsummary/docsummary/i_juniper_converter.h>
+#include <vespa/searchsummary/docsummary/i_string_field_converter.h>
#include <vespa/searchsummary/docsummary/summaryfieldconverter.h>
#include <vespa/document/base/exceptions.h>
#include <vespa/document/fieldvalue/iteratorhandler.h>
@@ -30,38 +31,34 @@ bool is_struct_or_multivalue_field_type(const document::DataType& data_type)
* This class creates a modified field value which is then passed to
* the original juniper converter.
*/
-class SnippetModifierJuniperConverter : public IJuniperConverter
+class SnippetModifierJuniperConverter : public IStringFieldConverter
{
- IJuniperConverter& _orig_converter;
- FieldModifier& _modifier;
+ IJuniperConverter& _juniper_converter;
+ FieldModifier* _modifier;
FieldPath _empty_field_path;
public:
- SnippetModifierJuniperConverter(IJuniperConverter& orig_converter, FieldModifier& modifier)
- : IJuniperConverter(),
- _orig_converter(orig_converter),
+ SnippetModifierJuniperConverter(IJuniperConverter& juniper_converter, FieldModifier* modifier)
+ : IStringFieldConverter(),
+ _juniper_converter(juniper_converter),
_modifier(modifier),
_empty_field_path()
{
}
~SnippetModifierJuniperConverter() override = default;
- void insert_juniper_field(vespalib::stringref input, vespalib::slime::Inserter& inserter) override;
- void insert_juniper_field(const document::StringFieldValue &input, vespalib::slime::Inserter& inserter) override;
+ void convert(const document::StringFieldValue &input, vespalib::slime::Inserter& inserter) override;
};
-
-void
-SnippetModifierJuniperConverter::insert_juniper_field(vespalib::stringref input, vespalib::slime::Inserter& inserter)
-{
- _orig_converter.insert_juniper_field(input, inserter);
-}
-
void
-SnippetModifierJuniperConverter::insert_juniper_field(const document::StringFieldValue &input, vespalib::slime::Inserter& inserter)
+SnippetModifierJuniperConverter::convert(const document::StringFieldValue &input, vespalib::slime::Inserter& inserter)
{
- auto fv = _modifier.modify(input, _empty_field_path);
- assert(fv);
- auto& modified_input = dynamic_cast<const document::StringFieldValue &>(*fv);
- _orig_converter.insert_juniper_field(modified_input.getValueRef(), inserter);
+ if (_modifier != nullptr) {
+ auto fv = _modifier->modify(input, _empty_field_path);
+ assert(fv);
+ auto& modified_input = dynamic_cast<const document::StringFieldValue &>(*fv);
+ _juniper_converter.convert(modified_input.getValueRef(), inserter);
+ } else {
+ _juniper_converter.convert(input.getValueRef(), inserter);
+ }
}
/**
@@ -155,22 +152,20 @@ DocsumStoreVsmDocument::insert_summary_field(const vespalib::string& field_name,
void
DocsumStoreVsmDocument::insert_juniper_field(const vespalib::string& field_name, vespalib::slime::Inserter& inserter, IJuniperConverter& converter) const
{
- // Markup for juniper has already been added due to FLATTENJUNIPER command in vsm summary config.
auto field_value = get_field_value(field_name);
if (field_value) {
+ FieldModifier* modifier = nullptr;
if (is_struct_or_multivalue_field_type(*field_value->getDataType())) {
auto entry_idx = _result_class.GetIndexFromName(field_name.c_str());
if (entry_idx >= 0) {
assert((uint32_t) entry_idx < _result_class.GetNumEntries());
- auto modifier = _docsum_filter.get_field_modifier(entry_idx);
- if (modifier != nullptr) {
- SnippetModifierJuniperConverter stacked_converter(converter, *modifier);
- SummaryFieldConverter::insert_juniper_field(*field_value, inserter, stacked_converter);
- return;
- }
+ modifier = _docsum_filter.get_field_modifier(entry_idx);
}
+ } else {
+ // Markup for juniper has already been added due to FLATTENJUNIPER command in vsm summary config.
}
- SummaryFieldConverter::insert_juniper_field(*field_value, inserter, converter);
+ SnippetModifierJuniperConverter string_converter(converter, modifier);
+ SummaryFieldConverter::insert_juniper_field(*field_value, inserter, string_converter);
}
}