diff options
author | Tor Egge <Tor.Egge@yahooinc.com> | 2022-09-05 17:33:50 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-09-05 17:33:50 +0200 |
commit | d827ac5da4e97d2b9f619675198cdb77c55581e1 (patch) | |
tree | 413e84b8bb6e60f63152a0d688651ad36ac7ec72 /searchsummary | |
parent | 0548f6a7180b92083cf248abbfdacb3fe6606e6f (diff) | |
parent | d473cd4dd11cd46d79a0209efddbcd9d2b9572bd (diff) |
Merge pull request #23918 from vespa-engine/toregge/change-matched-elments-filter-dfw-to-insert-an-empty-array-if-input-field-is-empty-or-not-set
Change matched elements filter docsum field writer to insert an empty
Diffstat (limited to 'searchsummary')
-rw-r--r-- | searchsummary/src/tests/docsummary/matched_elements_filter/matched_elements_filter_test.cpp | 68 | ||||
-rw-r--r-- | searchsummary/src/vespa/searchsummary/docsummary/matched_elements_filter_dfw.cpp | 3 |
2 files changed, 55 insertions, 16 deletions
diff --git a/searchsummary/src/tests/docsummary/matched_elements_filter/matched_elements_filter_test.cpp b/searchsummary/src/tests/docsummary/matched_elements_filter/matched_elements_filter_test.cpp index 22b3ae69165..4fcf8c10401 100644 --- a/searchsummary/src/tests/docsummary/matched_elements_filter/matched_elements_filter_test.cpp +++ b/searchsummary/src/tests/docsummary/matched_elements_filter/matched_elements_filter_test.cpp @@ -70,6 +70,8 @@ private: ArrayDataType _array_type; MapDataType _map_type; WeightedSetDataType _wset_type; + bool _empty_values; + bool _skip_set_values; StructFieldValue::UP make_elem_value(const std::string& name, int weight) const { auto result = std::make_unique<StructFieldValue>(*_elem_type); @@ -85,7 +87,9 @@ public: _elem_type(make_struct_elem_type()), _array_type(*_elem_type), _map_type(*DataType::STRING, *_elem_type), - _wset_type(*DataType::STRING, false, false) + _wset_type(*DataType::STRING, false, false), + _empty_values(false), + _skip_set_values(false) { _doc_type.addField(Field("array", _array_type)); _doc_type.addField(Field("map", _map_type)); @@ -105,32 +109,50 @@ public: auto doc = std::make_unique<Document>(_doc_type, DocumentId("id:test:test::0")); { ArrayFieldValue array_value(_array_type); - array_value.append(make_elem_value("a", 3)); - array_value.append(make_elem_value("b", 5)); - array_value.append(make_elem_value("c", 7)); - doc->setValue("array", array_value); + if (!_empty_values) { + array_value.append(make_elem_value("a", 3)); + array_value.append(make_elem_value("b", 5)); + array_value.append(make_elem_value("c", 7)); + } + if (!_skip_set_values) { + doc->setValue("array", array_value); + } } { MapFieldValue map_value(_map_type); - map_value.put(StringFieldValue("a"), *make_elem_value("a", 3)); - map_value.put(StringFieldValue("b"), *make_elem_value("b", 5)); - map_value.put(StringFieldValue("c"), *make_elem_value("c", 7)); - doc->setValue("map", map_value); + if (!_empty_values) { + map_value.put(StringFieldValue("a"), *make_elem_value("a", 3)); + map_value.put(StringFieldValue("b"), *make_elem_value("b", 5)); + map_value.put(StringFieldValue("c"), *make_elem_value("c", 7)); + } + if (!_skip_set_values) { + doc->setValue("map", map_value); + } } { MapFieldValue map2_value(_map_type); - map2_value.put(StringFieldValue("dummy"), *make_elem_value("dummy", 2)); - doc->setValue("map2", map2_value); + if (!_empty_values) { + map2_value.put(StringFieldValue("dummy"), *make_elem_value("dummy", 2)); + } + if (!_skip_set_values) { + doc->setValue("map2", map2_value); + } } { WeightedSetFieldValue wset_value(_wset_type); - wset_value.add(StringFieldValue("a"), 13); - wset_value.add(StringFieldValue("b"), 15); - wset_value.add(StringFieldValue("c"), 17); - doc->setValue("wset", wset_value); + if (!_empty_values) { + wset_value.add(StringFieldValue("a"), 13); + wset_value.add(StringFieldValue("b"), 15); + wset_value.add(StringFieldValue("c"), 17); + } + if (!_skip_set_values) { + doc->setValue("wset", wset_value); + } } return std::make_unique<DocsumStoreDocument>(std::move(doc)); } + void set_empty_values() { _empty_values = true; } + void set_skip_set_values() { _skip_set_values = true; } }; DocsumStore::~DocsumStore() = default; @@ -218,7 +240,9 @@ public: EXPECT_EQ(exp.slime, act); } const MatchingElementsFields& fields() const { return *_fields; } -}; + void set_empty_values() { _doc_store.set_empty_values(); } + void set_skip_set_values() { _doc_store.set_skip_set_values(); } + }; MatchedElementsFilterTest::~MatchedElementsFilterTest() = default; @@ -232,6 +256,10 @@ TEST_F(MatchedElementsFilterTest, filters_elements_in_array_field_value) "{'name':'b','weight':5}," "{'name':'c','weight':7}]"); expect_filtered("array", {0, 1, 100}, "[]"); + set_empty_values(); + expect_filtered("array", {}, "null"); + set_skip_set_values(); + expect_filtered("array", {}, "null"); } TEST_F(MatchedElementsFilterTest, matching_elements_fields_is_setup_for_array_field_value) @@ -252,6 +280,10 @@ TEST_F(MatchedElementsFilterTest, filters_elements_in_map_field_value) "{'key':'b','value':{'name':'b','weight':5}}," "{'key':'c','value':{'name':'c','weight':7}}]"); expect_filtered("map", {0, 1, 100}, "[]"); + set_empty_values(); + expect_filtered("map", {}, "null"); + set_skip_set_values(); + expect_filtered("map", {}, "null"); } TEST_F(MatchedElementsFilterTest, filter_elements_in_weighed_set_field_value) @@ -262,6 +294,10 @@ TEST_F(MatchedElementsFilterTest, filter_elements_in_weighed_set_field_value) expect_filtered("wset", {2}, "[{'item':'c','weight':17}]"); expect_filtered("wset", {0, 1, 2}, "[{'item':'a','weight':13},{'item':'b','weight':15},{'item':'c','weight':17}]"); expect_filtered("wset", {0, 1, 100}, "[]"); + set_empty_values(); + expect_filtered("wset", {}, "null"); + set_skip_set_values(); + expect_filtered("wset", {}, "null"); } TEST_F(MatchedElementsFilterTest, matching_elements_fields_is_setup_for_map_field_value) diff --git a/searchsummary/src/vespa/searchsummary/docsummary/matched_elements_filter_dfw.cpp b/searchsummary/src/vespa/searchsummary/docsummary/matched_elements_filter_dfw.cpp index e83860ed8bf..6f53c0b1c84 100644 --- a/searchsummary/src/vespa/searchsummary/docsummary/matched_elements_filter_dfw.cpp +++ b/searchsummary/src/vespa/searchsummary/docsummary/matched_elements_filter_dfw.cpp @@ -76,6 +76,9 @@ filter_matching_elements_in_input_field_while_converting_to_slime(const FieldVal assert(converted->isLiteral()); auto& literal = static_cast<const LiteralFieldValueB&>(*converted); vespalib::stringref buf = literal.getValueRef(); + if (buf.empty()) { + return; + } Slime input_field_as_slime; BinaryFormat::decode(vespalib::Memory(buf.data(), buf.size()), input_field_as_slime); inject(input_field_as_slime.get(), target); |