summaryrefslogtreecommitdiffstats
path: root/streamingvisitors
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@online.no>2023-01-26 21:23:45 +0100
committerTor Egge <Tor.Egge@online.no>2023-01-27 10:25:47 +0100
commit1aeb347bb3ac1c1f01c452e00ef6055cd0ead057 (patch)
treeef0cd57ef8f618a31958113cb6606e9b426d8b6f /streamingvisitors
parentd62231991a4abf4f332a04d6928ffe2da9181785 (diff)
Enable use of snippet modifier when inserting juniper field
without corresponding FLATTENJUNIPER command in vsm summary config.
Diffstat (limited to 'streamingvisitors')
-rw-r--r--streamingvisitors/src/vespa/vsm/vsm/docsumfilter.cpp24
-rw-r--r--streamingvisitors/src/vespa/vsm/vsm/docsumfilter.h1
2 files changed, 19 insertions, 6 deletions
diff --git a/streamingvisitors/src/vespa/vsm/vsm/docsumfilter.cpp b/streamingvisitors/src/vespa/vsm/vsm/docsumfilter.cpp
index 398404c6e71..596525e17d7 100644
--- a/streamingvisitors/src/vespa/vsm/vsm/docsumfilter.cpp
+++ b/streamingvisitors/src/vespa/vsm/vsm/docsumfilter.cpp
@@ -240,14 +240,18 @@ DocsumStoreVsmDocument::insert_juniper_field(const vespalib::string& field_name,
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 entry_idx = _result_class.getIndexFromName(field_name.c_str());
+ if (entry_idx >= 0) {
+ assert((uint32_t) entry_idx < _result_class.getNumEntries());
+ if (is_struct_or_multivalue_field_type(*field_value->getDataType())) {
modifier = _docsum_filter.get_field_modifier(entry_idx);
+ } else {
+ if (!_docsum_filter.has_flatten_juniper_command(entry_idx)) {
+ modifier = _docsum_filter.get_field_modifier(entry_idx);
+ } else {
+ // Markup for juniper has already been added due to FLATTENJUNIPER command in vsm summary config.
+ }
}
- } else {
- // Markup for juniper has already been added due to FLATTENJUNIPER command in vsm summary config.
}
SnippetModifierJuniperConverter string_converter(converter, modifier);
SlimeFiller::insert_juniper_field(*field_value, inserter, string_converter);
@@ -407,6 +411,14 @@ DocsumFilter::insert_summary_field(uint32_t entry_idx, const Document& doc, vesp
_flattenWriter.clear();
}
+bool
+DocsumFilter::has_flatten_juniper_command(uint32_t entry_idx) const
+{
+ const auto& field_spec = _fields[entry_idx];
+ auto command = field_spec.getCommand();
+ return command == VsmsummaryConfig::Fieldmap::Command::FLATTENJUNIPER;
+}
+
FieldModifier*
DocsumFilter::get_field_modifier(uint32_t entry_idx)
{
diff --git a/streamingvisitors/src/vespa/vsm/vsm/docsumfilter.h b/streamingvisitors/src/vespa/vsm/vsm/docsumfilter.h
index e87a3e9a431..584f7c8141e 100644
--- a/streamingvisitors/src/vespa/vsm/vsm/docsumfilter.h
+++ b/streamingvisitors/src/vespa/vsm/vsm/docsumfilter.h
@@ -67,6 +67,7 @@ public:
search::docsummary::DocsumStoreFieldValue get_summary_field(uint32_t entry_idx, const Document& doc);
void insert_summary_field(uint32_t entry_idx, const Document& doc, vespalib::slime::Inserter& inserter);
+ bool has_flatten_juniper_command(uint32_t entry_idx) const;
FieldModifier* get_field_modifier(uint32_t entry_idx);
};