diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2023-10-12 21:28:24 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-10-12 21:28:24 +0200 |
commit | bb3ecff6954f3928c549ae4b967d35865f151320 (patch) | |
tree | 8e23f2038425c01dbd9f132d7390f399ddc0192c | |
parent | 7060f6a27b43e3e3265ba26f6eed8481b6ceb0f4 (diff) | |
parent | 8ecab6547d68bcb155a6f1672670855410c85e8d (diff) |
Merge pull request #28906 from vespa-engine/toregge/enable-passing-string-field-converter-to-docsum-store-document-insert-summary-field
Enable passing search::docsummary::IStringFieldConverter pointer to
8 files changed, 21 insertions, 18 deletions
diff --git a/searchsummary/src/tests/docsummary/slime_filler/slime_filler_test.cpp b/searchsummary/src/tests/docsummary/slime_filler/slime_filler_test.cpp index 9468cc30a3d..10aedc6d9d0 100644 --- a/searchsummary/src/tests/docsummary/slime_filler/slime_filler_test.cpp +++ b/searchsummary/src/tests/docsummary/slime_filler/slime_filler_test.cpp @@ -351,7 +351,7 @@ SlimeFillerTest::expect_insert_summary_field_with_field_filter(const vespalib::s { Slime slime; SlimeInserter inserter(slime); - SlimeFiller::insert_summary_field_with_field_filter(fv, inserter, filter); + SlimeFiller::insert_summary_field_with_field_filter(fv, inserter, nullptr, filter); auto act = slime_to_string(slime); EXPECT_EQ(exp, act); } diff --git a/searchsummary/src/vespa/searchsummary/docsummary/docsum_store_document.cpp b/searchsummary/src/vespa/searchsummary/docsummary/docsum_store_document.cpp index c6756a6fd1a..63b71929d63 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/docsum_store_document.cpp +++ b/searchsummary/src/vespa/searchsummary/docsummary/docsum_store_document.cpp @@ -37,11 +37,11 @@ DocsumStoreDocument::get_field_value(const vespalib::string& field_name) const } void -DocsumStoreDocument::insert_summary_field(const vespalib::string& field_name, vespalib::slime::Inserter& inserter) const +DocsumStoreDocument::insert_summary_field(const vespalib::string& field_name, vespalib::slime::Inserter& inserter, IStringFieldConverter* converter) const { auto field_value = get_field_value(field_name); if (field_value) { - SlimeFiller::insert_summary_field(*field_value, inserter); + SlimeFiller::insert_summary_field(*field_value, inserter, converter); } } diff --git a/searchsummary/src/vespa/searchsummary/docsummary/docsum_store_document.h b/searchsummary/src/vespa/searchsummary/docsummary/docsum_store_document.h index f6e4e7e1244..3d8ca8abcc1 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/docsum_store_document.h +++ b/searchsummary/src/vespa/searchsummary/docsummary/docsum_store_document.h @@ -18,7 +18,7 @@ public: explicit DocsumStoreDocument(std::unique_ptr<document::Document> document); ~DocsumStoreDocument() override; DocsumStoreFieldValue get_field_value(const vespalib::string& field_name) const override; - void insert_summary_field(const vespalib::string& field_name, vespalib::slime::Inserter& inserter) const override; + void insert_summary_field(const vespalib::string& field_name, vespalib::slime::Inserter& inserter, IStringFieldConverter* converter) const override; void insert_juniper_field(const vespalib::string& field_name, vespalib::slime::Inserter& inserter, IJuniperConverter& converter) const override; void insert_document_id(vespalib::slime::Inserter& inserter) const override; }; 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 ffd37da4026..a229e98bb4b 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/i_docsum_store_document.h +++ b/searchsummary/src/vespa/searchsummary/docsummary/i_docsum_store_document.h @@ -10,6 +10,7 @@ namespace vespalib::slime { struct Inserter; } namespace search::docsummary { class IJuniperConverter; +class IStringFieldConverter; /** * Interface class providing access to a document retrieved from an IDocsumStore. @@ -21,7 +22,7 @@ class IDocsumStoreDocument public: virtual ~IDocsumStoreDocument() = default; virtual DocsumStoreFieldValue get_field_value(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_summary_field(const vespalib::string& field_name, vespalib::slime::Inserter& inserter, IStringFieldConverter* converter = nullptr) const = 0; virtual void insert_juniper_field(const vespalib::string& field_name, vespalib::slime::Inserter& inserter, IJuniperConverter& converter) const = 0; virtual void insert_document_id(vespalib::slime::Inserter& inserter) const = 0; }; diff --git a/searchsummary/src/vespa/searchsummary/docsummary/slime_filler.cpp b/searchsummary/src/vespa/searchsummary/docsummary/slime_filler.cpp index b3678a94ca7..7266642b18b 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/slime_filler.cpp +++ b/searchsummary/src/vespa/searchsummary/docsummary/slime_filler.cpp @@ -335,12 +335,12 @@ SlimeFiller::visit(const ReferenceFieldValue& value) } void -SlimeFiller::insert_summary_field(const FieldValue& value, vespalib::slime::Inserter& inserter) +SlimeFiller::insert_summary_field(const FieldValue& value, vespalib::slime::Inserter& inserter, IStringFieldConverter* converter) { CheckUndefinedValueVisitor check_undefined; value.accept(check_undefined); if (!check_undefined.is_undefined()) { - SlimeFiller visitor(inserter); + SlimeFiller visitor(inserter, converter, SlimeFillerFilter::all()); value.accept(visitor); } } @@ -357,12 +357,12 @@ SlimeFiller::insert_summary_field_with_filter(const FieldValue& value, vespalib: } void -SlimeFiller::insert_summary_field_with_field_filter(const document::FieldValue& value, vespalib::slime::Inserter& inserter, const SlimeFillerFilter* filter) +SlimeFiller::insert_summary_field_with_field_filter(const document::FieldValue& value, vespalib::slime::Inserter& inserter, IStringFieldConverter* converter, const SlimeFillerFilter* filter) { CheckUndefinedValueVisitor check_undefined; value.accept(check_undefined); if (!check_undefined.is_undefined()) { - SlimeFiller visitor(inserter, nullptr, (filter != nullptr) ? filter->begin() : SlimeFillerFilter::all()); + SlimeFiller visitor(inserter, converter, (filter != nullptr) ? filter->begin() : SlimeFillerFilter::all()); value.accept(visitor); } } diff --git a/searchsummary/src/vespa/searchsummary/docsummary/slime_filler.h b/searchsummary/src/vespa/searchsummary/docsummary/slime_filler.h index ff71cb7239c..547d2a13ec3 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/slime_filler.h +++ b/searchsummary/src/vespa/searchsummary/docsummary/slime_filler.h @@ -59,13 +59,13 @@ public: SlimeFillerFilter::Iterator filter); ~SlimeFiller() override; - static void insert_summary_field(const document::FieldValue& value, vespalib::slime::Inserter& inserter); + static void insert_summary_field(const document::FieldValue& value, vespalib::slime::Inserter& inserter, IStringFieldConverter* converter = nullptr); /** * Insert the given field value, but only the elements that are contained in the matching_elems vector. */ static void insert_summary_field_with_filter(const document::FieldValue& value, vespalib::slime::Inserter& inserter, const std::vector<uint32_t>& matching_elems); - static void insert_summary_field_with_field_filter(const document::FieldValue& value, vespalib::slime::Inserter& inserter, const SlimeFillerFilter* filter); + static void insert_summary_field_with_field_filter(const document::FieldValue& value, vespalib::slime::Inserter& inserter, IStringFieldConverter* converter, const SlimeFillerFilter* filter); static void insert_juniper_field(const document::FieldValue& value, vespalib::slime::Inserter& inserter, IStringFieldConverter& converter); }; diff --git a/streamingvisitors/src/vespa/vsm/vsm/docsumfilter.cpp b/streamingvisitors/src/vespa/vsm/vsm/docsumfilter.cpp index 23985fbce13..b48f556f4be 100644 --- a/streamingvisitors/src/vespa/vsm/vsm/docsumfilter.cpp +++ b/streamingvisitors/src/vespa/vsm/vsm/docsumfilter.cpp @@ -172,7 +172,7 @@ public: DocsumStoreVsmDocument(DocsumFilter& docsum_filter, const Document& vsm_document); ~DocsumStoreVsmDocument() override; DocsumStoreFieldValue get_field_value(const vespalib::string& field_name) const override; - void insert_summary_field(const vespalib::string& field_name, vespalib::slime::Inserter& inserter) const override; + void insert_summary_field(const vespalib::string& field_name, vespalib::slime::Inserter& inserter, IStringFieldConverter* converter) const override; void insert_juniper_field(const vespalib::string& field_name, vespalib::slime::Inserter& inserter, IJuniperConverter& converter) const override; void insert_document_id(vespalib::slime::Inserter& inserter) const override; }; @@ -212,13 +212,13 @@ DocsumStoreVsmDocument::get_field_value(const vespalib::string& field_name) cons } void -DocsumStoreVsmDocument::insert_summary_field(const vespalib::string& field_name, vespalib::slime::Inserter& inserter) const +DocsumStoreVsmDocument::insert_summary_field(const vespalib::string& field_name, vespalib::slime::Inserter& inserter, IStringFieldConverter* converter) const { if (_document != nullptr) { auto entry_idx = _result_class.getIndexFromName(field_name.c_str()); if (entry_idx >= 0) { assert((uint32_t) entry_idx < _result_class.getNumEntries()); - _docsum_filter.insert_summary_field(entry_idx, _vsm_document, inserter); + _docsum_filter.insert_summary_field(entry_idx, _vsm_document, inserter, converter); return; } try { @@ -226,7 +226,7 @@ DocsumStoreVsmDocument::insert_summary_field(const vespalib::string& field_name, auto value(field.getDataType().createFieldValue()); if (value) { if (_document->getValue(field, *value)) { - SlimeFiller::insert_summary_field(*value, inserter); + SlimeFiller::insert_summary_field(*value, inserter, converter); } } } catch (document::FieldNotFoundException&) { @@ -393,14 +393,14 @@ DocsumFilter::get_summary_field(uint32_t entry_idx, const Document& doc) } void -DocsumFilter::insert_summary_field(uint32_t entry_idx, const Document& doc, vespalib::slime::Inserter& inserter) +DocsumFilter::insert_summary_field(uint32_t entry_idx, const Document& doc, vespalib::slime::Inserter& inserter, IStringFieldConverter* converter) { const auto& field_spec = _fields[entry_idx]; auto single_source_field_id = get_single_source_field_id(field_spec); if (single_source_field_id.has_value()) { auto field_value = doc.getField(single_source_field_id.value()); if (field_value != nullptr) { - SlimeFiller::insert_summary_field_with_field_filter(*field_value, inserter, field_spec.get_filter()); + SlimeFiller::insert_summary_field_with_field_filter(*field_value, inserter, converter, field_spec.get_filter()); } return; } diff --git a/streamingvisitors/src/vespa/vsm/vsm/docsumfilter.h b/streamingvisitors/src/vespa/vsm/vsm/docsumfilter.h index db35fa2ff27..2232d723781 100644 --- a/streamingvisitors/src/vespa/vsm/vsm/docsumfilter.h +++ b/streamingvisitors/src/vespa/vsm/vsm/docsumfilter.h @@ -13,6 +13,8 @@ using search::docsummary::IDocsumStore; +namespace search::docsummary { class IStringFieldConverter; } + namespace vsm { /** @@ -66,7 +68,7 @@ public: std::unique_ptr<const search::docsummary::IDocsumStoreDocument> get_document(uint32_t id) override; 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); + void insert_summary_field(uint32_t entry_idx, const Document& doc, vespalib::slime::Inserter& inserter, search::docsummary::IStringFieldConverter* converter); bool has_flatten_juniper_command(uint32_t entry_idx) const; FieldModifier* get_field_modifier(uint32_t entry_idx); }; |