diff options
author | Tor Egge <Tor.Egge@online.no> | 2023-01-26 21:23:45 +0100 |
---|---|---|
committer | Tor Egge <Tor.Egge@online.no> | 2023-01-27 10:25:47 +0100 |
commit | 1aeb347bb3ac1c1f01c452e00ef6055cd0ead057 (patch) | |
tree | ef0cd57ef8f618a31958113cb6606e9b426d8b6f /streamingvisitors | |
parent | d62231991a4abf4f332a04d6928ffe2da9181785 (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.cpp | 24 | ||||
-rw-r--r-- | streamingvisitors/src/vespa/vsm/vsm/docsumfilter.h | 1 |
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); }; |