From 83c97aaad8bdfd6cc11b49be4a542e179cda1b4f Mon Sep 17 00:00:00 2001 From: Tor Egge Date: Wed, 25 Sep 2019 17:45:46 +0200 Subject: Add filtering support to attribute combiner dynamic field writer. --- .../attribute_combiner/attribute_combiner_test.cpp | 62 +++++++++++++++++++--- .../src/tests/docsummary/positionsdfw_test.cpp | 3 ++ .../slime_summary/slime_summary_test.cpp | 3 ++ 3 files changed, 62 insertions(+), 6 deletions(-) (limited to 'searchsummary/src/tests') diff --git a/searchsummary/src/tests/docsummary/attribute_combiner/attribute_combiner_test.cpp b/searchsummary/src/tests/docsummary/attribute_combiner/attribute_combiner_test.cpp index 01b458daf5d..240e7334292 100644 --- a/searchsummary/src/tests/docsummary/attribute_combiner/attribute_combiner_test.cpp +++ b/searchsummary/src/tests/docsummary/attribute_combiner/attribute_combiner_test.cpp @@ -8,6 +8,7 @@ #include #include #include +#include #include #include #include @@ -23,6 +24,7 @@ using search::AttributeManager; using search::AttributeVector; using search::IntegerAttribute; using search::FloatingPointAttribute; +using search::MatchingElements; using search::StringAttribute; using search::attribute::BasicType; using search::attribute::CollectionType; @@ -157,12 +159,30 @@ AttributeManagerFixture::buildIntegerAttribute(const vespalib::string &name, class DummyStateCallback : public GetDocsumsStateCallback { public: + MatchingElements _matching_elements; + + DummyStateCallback(); void FillSummaryFeatures(GetDocsumsState *, IDocsumEnvironment *) override { } void FillRankFeatures(GetDocsumsState *, IDocsumEnvironment *) override { } void ParseLocation(GetDocsumsState *) override { } + const MatchingElements& fill_matching_elements() override { return _matching_elements; } ~DummyStateCallback() override { } }; +DummyStateCallback::DummyStateCallback() + : GetDocsumsStateCallback(), + _matching_elements() +{ + _matching_elements.add_matching_elements(1, "array", {1}); + _matching_elements.add_matching_elements(3, "array", {0}); + _matching_elements.add_matching_elements(4, "array", {1}); + _matching_elements.add_matching_elements(1, "smap", {1}); + _matching_elements.add_matching_elements(3, "smap", {0}); + _matching_elements.add_matching_elements(4, "smap", {1}); + _matching_elements.add_matching_elements(1, "map", {1}); + _matching_elements.add_matching_elements(3, "map", {0}); + _matching_elements.add_matching_elements(4, "map", {1}); +} struct AttributeCombinerTest : public ::testing::Test { @@ -173,7 +193,7 @@ struct AttributeCombinerTest : public ::testing::Test AttributeCombinerTest(); ~AttributeCombinerTest(); - void set_field_name(const vespalib::string &field_name); + void set_field(const vespalib::string &field_name, bool filter_elements); void assertWritten(const vespalib::string &exp, uint32_t docId); }; @@ -189,9 +209,9 @@ AttributeCombinerTest::AttributeCombinerTest() AttributeCombinerTest::~AttributeCombinerTest() = default; void -AttributeCombinerTest::set_field_name(const vespalib::string &field_name) +AttributeCombinerTest::set_field(const vespalib::string &field_name, bool filter_elements) { - writer = AttributeCombinerDFW::create(field_name, attrs.mgr); + writer = AttributeCombinerDFW::create(field_name, attrs.mgr, filter_elements); EXPECT_TRUE(writer->setFieldWriterStateIndex(0)); state._fieldWriterStates.resize(1); } @@ -219,7 +239,7 @@ AttributeCombinerTest::assertWritten(const vespalib::string &expectedJson, uint3 TEST_F(AttributeCombinerTest, require_that_attribute_combiner_dfw_generates_correct_slime_output_for_array_of_struct) { - set_field_name("array"); + set_field("array", false); assertWritten("[ { fval: 110.0, name: \"n1.1\", val: 10}, { name: \"n1.2\", val: 11}]", 1); assertWritten("[ { fval: 120.0, name: \"n2\", val: 20}, { fval: 121.0, val: 21 }]", 2); assertWritten("[ { fval: 130.0, name: \"n3.1\", val: 30}, { fval: 131.0, name: \"n3.2\"} ]", 3); @@ -229,7 +249,7 @@ TEST_F(AttributeCombinerTest, require_that_attribute_combiner_dfw_generates_corr TEST_F(AttributeCombinerTest, require_that_attribute_combiner_dfw_generates_correct_slime_output_for_map_of_struct) { - set_field_name("smap"); + set_field("smap", false); assertWritten("[ { key: \"k1.1\", value: { fval: 110.0, name: \"n1.1\", val: 10} }, { key: \"k1.2\", value: { name: \"n1.2\", val: 11} }]", 1); assertWritten("[ { key: \"k2\", value: { fval: 120.0, name: \"n2\", val: 20} }, { value: { fval: 121.0, val: 21 } }]", 2); assertWritten("[ { key: \"k3.1\", value: { fval: 130.0, name: \"n3.1\", val: 30} }, { key: \"k3.2\", value: { fval: 131.0, name: \"n3.2\"} } ]", 3); @@ -239,7 +259,7 @@ TEST_F(AttributeCombinerTest, require_that_attribute_combiner_dfw_generates_corr TEST_F(AttributeCombinerTest, require_that_attribute_combiner_dfw_generates_correct_slime_output_for_map_of_string) { - set_field_name("map"); + set_field("map", false); assertWritten("[ { key: \"k1.1\", value: \"n1.1\" }, { key: \"k1.2\", value: \"n1.2\"}]", 1); assertWritten("[ { key: \"k2\"}]", 2); assertWritten("[ { key: \"k3.1\", value: \"n3.1\" }, { value: \"n3.2\"} ]", 3); @@ -247,6 +267,36 @@ TEST_F(AttributeCombinerTest, require_that_attribute_combiner_dfw_generates_corr assertWritten("null", 5); } +TEST_F(AttributeCombinerTest, require_that_attribute_combiner_dfw_generates_correct_slime_output_for_filtered_array_of_struct) +{ + set_field("array", true); + assertWritten("[ { name: \"n1.2\", val: 11}]", 1); + assertWritten("[ ]", 2); + assertWritten("[ { fval: 130.0, name: \"n3.1\", val: 30} ]", 3); + assertWritten("[ { fval: 141.0, name: \"n4.2\", val: 41} ]", 4); + assertWritten("null", 5); +} + +TEST_F(AttributeCombinerTest, require_that_attribute_combiner_dfw_generates_correct_slime_output_for_filtered_map_of_struct) +{ + set_field("smap", true); + assertWritten("[ { key: \"k1.2\", value: { name: \"n1.2\", val: 11} }]", 1); + assertWritten("[ ]", 2); + assertWritten("[ { key: \"k3.1\", value: { fval: 130.0, name: \"n3.1\", val: 30} } ]", 3); + assertWritten("[ { key: \"k4.2\", value: { fval: 141.0, name: \"n4.2\", val: 41} } ]", 4); + assertWritten("null", 5); +} + +TEST_F(AttributeCombinerTest, require_that_attribute_combiner_dfw_generates_correct_slime_output_for_filtered_map_of_string) +{ + set_field("map", true); + assertWritten("[ { key: \"k1.2\", value: \"n1.2\"}]", 1); + assertWritten("[ ]", 2); + assertWritten("[ { key: \"k3.1\", value: \"n3.1\" } ]", 3); + assertWritten("[ { key: \"k4.2\", value: \"n4.2\" } ]", 4); + assertWritten("null", 5); +} + } GTEST_MAIN_RUN_ALL_TESTS() diff --git a/searchsummary/src/tests/docsummary/positionsdfw_test.cpp b/searchsummary/src/tests/docsummary/positionsdfw_test.cpp index 764ff4723cb..86a2e9ae76f 100644 --- a/searchsummary/src/tests/docsummary/positionsdfw_test.cpp +++ b/searchsummary/src/tests/docsummary/positionsdfw_test.cpp @@ -3,6 +3,7 @@ #include #include +#include #include #include #include @@ -17,6 +18,7 @@ LOG_SETUP("positionsdfw_test"); using search::RawBuf; using search::IAttributeManager; +using search::MatchingElements; using search::SingleInt64ExtAttribute; using search::attribute::IAttributeContext; using search::attribute::IAttributeVector; @@ -104,6 +106,7 @@ struct MyGetDocsumsStateCallback : GetDocsumsStateCallback { virtual void FillSummaryFeatures(GetDocsumsState *, IDocsumEnvironment *) override {} virtual void FillRankFeatures(GetDocsumsState *, IDocsumEnvironment *) override {} virtual void ParseLocation(GetDocsumsState *) override {} + const MatchingElements& fill_matching_elements() override { abort(); } }; template diff --git a/searchsummary/src/tests/docsummary/slime_summary/slime_summary_test.cpp b/searchsummary/src/tests/docsummary/slime_summary/slime_summary_test.cpp index 5d6565ceadb..bd753f24bf3 100644 --- a/searchsummary/src/tests/docsummary/slime_summary/slime_summary_test.cpp +++ b/searchsummary/src/tests/docsummary/slime_summary/slime_summary_test.cpp @@ -1,5 +1,6 @@ // Copyright 2017 Yahoo Holdings. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #include +#include #include #include #include @@ -9,6 +10,7 @@ using namespace vespalib::slime::convenience; using namespace search::docsummary; +using search::MatchingElements; namespace { @@ -77,6 +79,7 @@ struct DocsumFixture : IDocsumStore, GetDocsumsStateCallback { void FillSummaryFeatures(GetDocsumsState *, IDocsumEnvironment *) override { } void FillRankFeatures(GetDocsumsState *, IDocsumEnvironment *) override { } void ParseLocation(GetDocsumsState *) override { } + const MatchingElements& fill_matching_elements() override { abort(); } }; -- cgit v1.2.3