aboutsummaryrefslogtreecommitdiffstats
path: root/streamingvisitors/src/vespa/vsm/vsm/docsum_field_writer_factory.cpp
diff options
context:
space:
mode:
authorGeir Storli <geirst@yahooinc.com>2023-03-31 14:13:39 +0000
committerGeir Storli <geirst@yahooinc.com>2023-03-31 14:13:39 +0000
commit0ac05b65c3a4246311763429b2ec3e31ad8e30b0 (patch)
tree1f8903f4b537f3c5a2f5c20516b6ab298977b944 /streamingvisitors/src/vespa/vsm/vsm/docsum_field_writer_factory.cpp
parentd65d548169183b47b931b3c5e39ad5a8fae06ce5 (diff)
Use one MatchingElementsFields instance per summary class.
This avoids calculating MatchingElements for fields that exist in other summary classes.
Diffstat (limited to 'streamingvisitors/src/vespa/vsm/vsm/docsum_field_writer_factory.cpp')
-rw-r--r--streamingvisitors/src/vespa/vsm/vsm/docsum_field_writer_factory.cpp9
1 files changed, 5 insertions, 4 deletions
diff --git a/streamingvisitors/src/vespa/vsm/vsm/docsum_field_writer_factory.cpp b/streamingvisitors/src/vespa/vsm/vsm/docsum_field_writer_factory.cpp
index 36873b713aa..b103d7d85b2 100644
--- a/streamingvisitors/src/vespa/vsm/vsm/docsum_field_writer_factory.cpp
+++ b/streamingvisitors/src/vespa/vsm/vsm/docsum_field_writer_factory.cpp
@@ -48,7 +48,8 @@ DocsumFieldWriterFactory::~DocsumFieldWriterFactory() = default;
std::unique_ptr<DocsumFieldWriter>
DocsumFieldWriterFactory::create_docsum_field_writer(const vespalib::string& field_name,
const vespalib::string& command,
- const vespalib::string& source)
+ const vespalib::string& source,
+ std::shared_ptr<MatchingElementsFields> matching_elems_fields)
{
std::unique_ptr<DocsumFieldWriter> fieldWriter;
using namespace search::docsummary;
@@ -65,10 +66,10 @@ DocsumFieldWriterFactory::create_docsum_field_writer(const vespalib::string& fie
} else if ((command == command::matched_attribute_elements_filter) ||
(command == command::matched_elements_filter)) {
vespalib::string source_field = source.empty() ? field_name : source;
- populate_fields(*_matching_elems_fields, _vsm_fields_config, source_field);
- fieldWriter = MatchedElementsFilterDFW::create(source_field, _matching_elems_fields);
+ populate_fields(*matching_elems_fields, _vsm_fields_config, source_field);
+ fieldWriter = MatchedElementsFilterDFW::create(source_field, matching_elems_fields);
} else {
- return search::docsummary::DocsumFieldWriterFactory::create_docsum_field_writer(field_name, command, source);
+ return search::docsummary::DocsumFieldWriterFactory::create_docsum_field_writer(field_name, command, source, matching_elems_fields);
}
return fieldWriter;
}