summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--searchcore/src/tests/proton/matching/matching_test.cpp20
-rw-r--r--searchcore/src/vespa/searchcore/proton/docsummary/docsumcontext.cpp4
-rw-r--r--searchcore/src/vespa/searchcore/proton/docsummary/docsumcontext.h2
-rw-r--r--searchcore/src/vespa/searchcore/proton/matching/docsum_matcher.cpp26
-rw-r--r--searchcore/src/vespa/searchcore/proton/matching/docsum_matcher.h6
-rw-r--r--searchcore/src/vespa/searchcore/proton/matching/matcher.cpp6
-rw-r--r--searchcore/src/vespa/searchcore/proton/matching/matcher.h10
-rw-r--r--searchlib/CMakeLists.txt2
-rw-r--r--searchlib/src/tests/common/matching_elements_fields/CMakeLists.txt9
-rw-r--r--searchlib/src/tests/common/matching_elements_fields/matching_elements_fields_test.cpp55
-rw-r--r--searchlib/src/tests/common/struct_field_mapper/CMakeLists.txt9
-rw-r--r--searchlib/src/tests/common/struct_field_mapper/struct_field_mapper_test.cpp52
-rw-r--r--searchlib/src/vespa/searchlib/common/CMakeLists.txt2
-rw-r--r--searchlib/src/vespa/searchlib/common/matching_elements.cpp8
-rw-r--r--searchlib/src/vespa/searchlib/common/matching_elements.h8
-rw-r--r--searchlib/src/vespa/searchlib/common/matching_elements_fields.cpp10
-rw-r--r--searchlib/src/vespa/searchlib/common/matching_elements_fields.h51
-rw-r--r--searchlib/src/vespa/searchlib/common/struct_field_mapper.cpp10
-rw-r--r--searchlib/src/vespa/searchlib/common/struct_field_mapper.h48
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/same_element_blueprint.cpp4
-rw-r--r--searchlib/src/vespa/searchlib/queryeval/same_element_blueprint.h6
-rw-r--r--searchsummary/src/tests/docsummary/attribute_combiner/attribute_combiner_test.cpp66
-rw-r--r--searchsummary/src/tests/docsummary/matched_elements_filter/matched_elements_filter_test.cpp40
-rw-r--r--searchsummary/src/tests/docsummary/positionsdfw_test.cpp2
-rw-r--r--searchsummary/src/tests/docsummary/slime_summary/slime_summary_test.cpp2
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/array_attribute_combiner_dfw.cpp10
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/array_attribute_combiner_dfw.h2
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/attribute_combiner_dfw.cpp16
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/attribute_combiner_dfw.h10
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/docsumconfig.cpp14
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/docsumconfig.h4
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/docsumstate.cpp4
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/docsumstate.h6
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/matched_elements_filter_dfw.cpp18
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/matched_elements_filter_dfw.h8
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/struct_fields_resolver.cpp10
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/struct_fields_resolver.h4
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/struct_map_attribute_combiner_dfw.cpp10
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/struct_map_attribute_combiner_dfw.h2
-rw-r--r--streamingvisitors/src/tests/matching_elements_filler/matching_elements_filler_test.cpp45
-rw-r--r--streamingvisitors/src/vespa/searchvisitor/matching_elements_filler.cpp46
-rw-r--r--streamingvisitors/src/vespa/searchvisitor/matching_elements_filler.h2
-rw-r--r--vsm/src/vespa/vsm/vsm/docsumconfig.cpp16
-rw-r--r--vsm/src/vespa/vsm/vsm/docsumconfig.h2
-rw-r--r--vsm/src/vespa/vsm/vsm/i_matching_elements_filler.h4
-rw-r--r--vsm/src/vespa/vsm/vsm/vsm-adapter.cpp4
-rw-r--r--vsm/src/vespa/vsm/vsm/vsm-adapter.h2
47 files changed, 353 insertions, 344 deletions
diff --git a/searchcore/src/tests/proton/matching/matching_test.cpp b/searchcore/src/tests/proton/matching/matching_test.cpp
index 00a319db394..9d5b67af81c 100644
--- a/searchcore/src/tests/proton/matching/matching_test.cpp
+++ b/searchcore/src/tests/proton/matching/matching_test.cpp
@@ -363,10 +363,10 @@ struct MyWorld {
return docsum_matcher->get_rank_features();
}
- MatchingElements::UP get_matching_elements(const DocsumRequest &req, const StructFieldMapper &mapper) {
+ MatchingElements::UP get_matching_elements(const DocsumRequest &req, const MatchingElementsFields &fields) {
Matcher::SP matcher = createMatcher();
auto docsum_matcher = matcher->create_docsum_matcher(req, searchContext, attributeContext, *sessionManager);
- return docsum_matcher->get_matching_elements(mapper);
+ return docsum_matcher->get_matching_elements(fields);
}
};
@@ -922,10 +922,10 @@ TEST("require that docsum matcher can extract matching elements from same elemen
world.basicSetup();
world.add_same_element_results("foo", "bar");
auto request = world.create_docsum_request(make_same_element_stack_dump("foo", "bar"), {20});
- StructFieldMapper mapper;
- mapper.add_mapping("my", "my.a1");
- mapper.add_mapping("my", "my.f1");
- auto result = world.get_matching_elements(*request, mapper);
+ MatchingElementsFields fields;
+ fields.add_mapping("my", "my.a1");
+ fields.add_mapping("my", "my.f1");
+ auto result = world.get_matching_elements(*request, fields);
const auto &list = result->get_matching_elements(20, "my");
ASSERT_EQUAL(list.size(), 1u);
EXPECT_EQUAL(list[0], 2u);
@@ -936,10 +936,10 @@ TEST("require that docsum matcher can extract matching elements from single attr
world.basicSetup();
world.add_same_element_results("foo", "bar");
auto request = world.create_docsum_request(make_simple_stack_dump("my.a1", "foo"), {20});
- StructFieldMapper mapper;
- mapper.add_mapping("my", "my.a1");
- mapper.add_mapping("my", "my.f1");
- auto result = world.get_matching_elements(*request, mapper);
+ MatchingElementsFields fields;
+ fields.add_mapping("my", "my.a1");
+ fields.add_mapping("my", "my.f1");
+ auto result = world.get_matching_elements(*request, fields);
const auto &list = result->get_matching_elements(20, "my");
ASSERT_EQUAL(list.size(), 2u);
EXPECT_EQUAL(list[0], 2u);
diff --git a/searchcore/src/vespa/searchcore/proton/docsummary/docsumcontext.cpp b/searchcore/src/vespa/searchcore/proton/docsummary/docsumcontext.cpp
index 872b4b27584..4fcd5aff4f9 100644
--- a/searchcore/src/vespa/searchcore/proton/docsummary/docsumcontext.cpp
+++ b/searchcore/src/vespa/searchcore/proton/docsummary/docsumcontext.cpp
@@ -214,10 +214,10 @@ DocsumContext::ParseLocation(search::docsummary::GetDocsumsState *state)
}
std::unique_ptr<MatchingElements>
-DocsumContext::fill_matching_elements(const StructFieldMapper &struct_field_mapper)
+DocsumContext::fill_matching_elements(const MatchingElementsFields &fields)
{
if (_matcher) {
- return _matcher->get_matching_elements(_request, _searchCtx, _attrCtx, _sessionMgr, struct_field_mapper);
+ return _matcher->get_matching_elements(_request, _searchCtx, _attrCtx, _sessionMgr, fields);
}
return std::make_unique<MatchingElements>();
}
diff --git a/searchcore/src/vespa/searchcore/proton/docsummary/docsumcontext.h b/searchcore/src/vespa/searchcore/proton/docsummary/docsumcontext.h
index 467add7face..1624048828f 100644
--- a/searchcore/src/vespa/searchcore/proton/docsummary/docsumcontext.h
+++ b/searchcore/src/vespa/searchcore/proton/docsummary/docsumcontext.h
@@ -53,7 +53,7 @@ public:
void FillSummaryFeatures(search::docsummary::GetDocsumsState * state, search::docsummary::IDocsumEnvironment * env) override;
void FillRankFeatures(search::docsummary::GetDocsumsState * state, search::docsummary::IDocsumEnvironment * env) override;
void ParseLocation(search::docsummary::GetDocsumsState * state) override;
- std::unique_ptr<search::MatchingElements> fill_matching_elements(const search::StructFieldMapper &struct_field_mapper) override;
+ std::unique_ptr<search::MatchingElements> fill_matching_elements(const search::MatchingElementsFields &fields) override;
};
} // namespace proton
diff --git a/searchcore/src/vespa/searchcore/proton/matching/docsum_matcher.cpp b/searchcore/src/vespa/searchcore/proton/matching/docsum_matcher.cpp
index a9f87cb249e..c8d0a572cd9 100644
--- a/searchcore/src/vespa/searchcore/proton/matching/docsum_matcher.cpp
+++ b/searchcore/src/vespa/searchcore/proton/matching/docsum_matcher.cpp
@@ -19,7 +19,7 @@ LOG_SETUP(".proton.matching.docsum_matcher");
using search::FeatureSet;
using search::MatchingElements;
-using search::StructFieldMapper;
+using search::MatchingElementsFields;
using search::fef::FeatureResolver;
using search::fef::RankProgram;
using search::queryeval::AndNotBlueprint;
@@ -100,13 +100,13 @@ void find_matching_elements(const std::vector<uint32_t> &docs, const SameElement
for (uint32_t i = 0; i < docs.size(); ++i) {
search->find_matching_elements(docs[i], matches);
if (!matches.empty()) {
- result.add_matching_elements(docs[i], same_element.struct_field_name(), matches);
+ result.add_matching_elements(docs[i], same_element.field_name(), matches);
matches.clear();
}
}
}
-void find_matching_elements(const std::vector<uint32_t> &docs, const vespalib::string &struct_field_name, const AttrSearchCtx &attr_ctx, MatchingElements &result) {
+void find_matching_elements(const std::vector<uint32_t> &docs, const vespalib::string &field_name, const AttrSearchCtx &attr_ctx, MatchingElements &result) {
int32_t weight = 0;
std::vector<uint32_t> matches;
for (uint32_t i = 0; i < docs.size(); ++i) {
@@ -114,26 +114,26 @@ void find_matching_elements(const std::vector<uint32_t> &docs, const vespalib::s
matches.push_back(id);
}
if (!matches.empty()) {
- result.add_matching_elements(docs[i], struct_field_name, matches);
+ result.add_matching_elements(docs[i], field_name, matches);
matches.clear();
}
}
}
-void find_matching_elements(const StructFieldMapper &mapper, const std::vector<uint32_t> &docs, const Blueprint &bp, MatchingElements &result) {
+void find_matching_elements(const MatchingElementsFields &fields, const std::vector<uint32_t> &docs, const Blueprint &bp, MatchingElements &result) {
if (auto same_element = as<SameElementBlueprint>(bp)) {
- if (mapper.is_struct_field(same_element->struct_field_name())) {
+ if (fields.has_field(same_element->field_name())) {
find_matching_elements(docs, *same_element, result);
}
} else if (const AttrSearchCtx *attr_ctx = bp.get_attribute_search_context()) {
- if (mapper.is_struct_subfield(attr_ctx->attributeName())) {
- find_matching_elements(docs, mapper.get_struct_field(attr_ctx->attributeName()), *attr_ctx, result);
+ if (fields.has_struct_field(attr_ctx->attributeName())) {
+ find_matching_elements(docs, fields.get_enclosing_field(attr_ctx->attributeName()), *attr_ctx, result);
}
} else if (auto and_not = as<AndNotBlueprint>(bp)) {
- find_matching_elements(mapper, docs, and_not->getChild(0), result);
+ find_matching_elements(fields, docs, and_not->getChild(0), result);
} else if (auto intermediate = as<IntermediateBlueprint>(bp)) {
for (size_t i = 0; i < intermediate->childCnt(); ++i) {
- find_matching_elements(mapper, docs, intermediate->getChild(i), result);
+ find_matching_elements(fields, docs, intermediate->getChild(i), result);
}
}
}
@@ -189,12 +189,12 @@ DocsumMatcher::get_rank_features() const
}
MatchingElements::UP
-DocsumMatcher::get_matching_elements(const StructFieldMapper &field_mapper) const
+DocsumMatcher::get_matching_elements(const MatchingElementsFields &fields) const
{
auto result = std::make_unique<MatchingElements>();
- if (_mtf && !field_mapper.empty()) {
+ if (_mtf && !fields.empty()) {
if (const Blueprint *root = _mtf->query().peekRoot()) {
- find_matching_elements(field_mapper, _docs, *root, *result);
+ find_matching_elements(fields, _docs, *root, *result);
}
}
return result;
diff --git a/searchcore/src/vespa/searchcore/proton/matching/docsum_matcher.h b/searchcore/src/vespa/searchcore/proton/matching/docsum_matcher.h
index 7fdfbc1d2ba..2e2250c476c 100644
--- a/searchcore/src/vespa/searchcore/proton/matching/docsum_matcher.h
+++ b/searchcore/src/vespa/searchcore/proton/matching/docsum_matcher.h
@@ -3,8 +3,8 @@
#pragma once
#include <vespa/searchlib/common/featureset.h>
-#include <vespa/searchlib/common/struct_field_mapper.h>
#include <vespa/searchlib/common/matching_elements.h>
+#include <vespa/searchlib/common/matching_elements_fields.h>
#include <vector>
#include <memory>
@@ -22,7 +22,7 @@ class DocsumMatcher
{
private:
using FeatureSet = search::FeatureSet;
- using StructFieldMapper = search::StructFieldMapper;
+ using MatchingElementsFields = search::MatchingElementsFields;
using MatchingElements = search::MatchingElements;
std::shared_ptr<SearchSession> _from_session;
@@ -40,7 +40,7 @@ public:
FeatureSet::UP get_summary_features() const;
FeatureSet::UP get_rank_features() const;
- MatchingElements::UP get_matching_elements(const StructFieldMapper &field_mapper) const;
+ MatchingElements::UP get_matching_elements(const MatchingElementsFields &fields) const;
};
}
diff --git a/searchcore/src/vespa/searchcore/proton/matching/matcher.cpp b/searchcore/src/vespa/searchcore/proton/matching/matcher.cpp
index 630ac66f4f1..93b4f63060f 100644
--- a/searchcore/src/vespa/searchcore/proton/matching/matcher.cpp
+++ b/searchcore/src/vespa/searchcore/proton/matching/matcher.cpp
@@ -27,7 +27,7 @@ using namespace search::grouping;
using search::DocumentMetaData;
using search::LidUsageStats;
using search::FeatureSet;
-using search::StructFieldMapper;
+using search::MatchingElementsFields;
using search::MatchingElements;
using search::attribute::IAttributeContext;
using search::fef::MatchDataLayout;
@@ -336,10 +336,10 @@ Matcher::getRankFeatures(const DocsumRequest & req, ISearchContext & searchCtx,
MatchingElements::UP
Matcher::get_matching_elements(const DocsumRequest &req, ISearchContext &search_ctx,
IAttributeContext &attr_ctx, SessionManager &session_manager,
- const StructFieldMapper &field_mapper)
+ const MatchingElementsFields &fields)
{
auto docsum_matcher = create_docsum_matcher(req, search_ctx, attr_ctx, session_manager);
- return docsum_matcher->get_matching_elements(field_mapper);
+ return docsum_matcher->get_matching_elements(fields);
}
DocsumMatcher::UP
diff --git a/searchcore/src/vespa/searchcore/proton/matching/matcher.h b/searchcore/src/vespa/searchcore/proton/matching/matcher.h
index 14562ffd6ca..243fdad63ae 100644
--- a/searchcore/src/vespa/searchcore/proton/matching/matcher.h
+++ b/searchcore/src/vespa/searchcore/proton/matching/matcher.h
@@ -12,7 +12,7 @@
#include <vespa/searchcommon/attribute/i_attribute_functor.h>
#include <vespa/searchlib/fef/blueprintfactory.h>
#include <vespa/searchlib/common/featureset.h>
-#include <vespa/searchlib/common/struct_field_mapper.h>
+#include <vespa/searchlib/common/matching_elements_fields.h>
#include <vespa/searchlib/common/matching_elements.h>
#include <vespa/searchlib/common/resultset.h>
#include <vespa/searchlib/queryeval/blueprint.h>
@@ -54,8 +54,8 @@ private:
using SearchRequest = search::engine::SearchRequest;
using Properties = search::fef::Properties;
using my_clock = std::chrono::steady_clock;
- using StructFieldMapper = search::StructFieldMapper;
using MatchingElements = search::MatchingElements;
+ using MatchingElementsFields = search::MatchingElementsFields;
IndexEnvironment _indexEnv;
search::fef::BlueprintFactory _blueprintFactory;
std::shared_ptr<search::fef::RankSetup> _rankSetup;
@@ -162,13 +162,13 @@ public:
* @param search_ctx abstract view of searchable data
* @param attr_ctx abstract view of attribute data
* @param session_manager multilevel grouping session and query cache
- * @param field_mapper knows which fields to collect information
- * about and how they relate to each other
+ * @param fields knows which fields to collect information
+ * about and how they relate to each other
* @return matching elements
**/
MatchingElements::UP get_matching_elements(const DocsumRequest &req, ISearchContext &search_ctx,
IAttributeContext &attr_ctx, SessionManager &session_manager,
- const StructFieldMapper &field_mapper);
+ const MatchingElementsFields &fields);
DocsumMatcher::UP create_docsum_matcher(const DocsumRequest &req, ISearchContext &search_ctx,
IAttributeContext &attr_ctx, SessionManager &session_manager);
diff --git a/searchlib/CMakeLists.txt b/searchlib/CMakeLists.txt
index 47b382af3f1..e9e2087e9d1 100644
--- a/searchlib/CMakeLists.txt
+++ b/searchlib/CMakeLists.txt
@@ -104,8 +104,8 @@ vespa_define_module(
src/tests/common/bitvector
src/tests/common/location
src/tests/common/matching_elements
+ src/tests/common/matching_elements_fields
src/tests/common/resultset
- src/tests/common/struct_field_mapper
src/tests/common/summaryfeatures
src/tests/diskindex/bitvector
src/tests/diskindex/diskindex
diff --git a/searchlib/src/tests/common/matching_elements_fields/CMakeLists.txt b/searchlib/src/tests/common/matching_elements_fields/CMakeLists.txt
new file mode 100644
index 00000000000..3d6f338315a
--- /dev/null
+++ b/searchlib/src/tests/common/matching_elements_fields/CMakeLists.txt
@@ -0,0 +1,9 @@
+# Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+vespa_add_executable(searchlib_common_matching_elements_fields_test_app TEST
+ SOURCES
+ matching_elements_fields_test.cpp
+ DEPENDS
+ searchlib
+ gtest
+)
+vespa_add_test(NAME searchlib_common_matching_elements_fields_test_app COMMAND searchlib_common_matching_elements_fields_test_app)
diff --git a/searchlib/src/tests/common/matching_elements_fields/matching_elements_fields_test.cpp b/searchlib/src/tests/common/matching_elements_fields/matching_elements_fields_test.cpp
new file mode 100644
index 00000000000..766be30f8f1
--- /dev/null
+++ b/searchlib/src/tests/common/matching_elements_fields/matching_elements_fields_test.cpp
@@ -0,0 +1,55 @@
+// Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+
+#include <vespa/vespalib/gtest/gtest.h>
+#include <vespa/searchlib/common/matching_elements_fields.h>
+
+using namespace search;
+
+namespace {
+
+std::string str(const vespalib::string &s) { return std::string(s.data(), s.size()); }
+
+}
+
+struct MatchingElementsFieldsTest : ::testing::Test {
+ MatchingElementsFields fields;
+ MatchingElementsFieldsTest() : fields() {
+ fields.add_mapping("foo", "foo.a");
+ fields.add_mapping("foo", "foo.b");
+ fields.add_mapping("bar", "bar.x");
+ fields.add_mapping("bar", "bar.y");
+ fields.add_field("baz");
+ }
+ ~MatchingElementsFieldsTest() = default;
+};
+
+TEST_F(MatchingElementsFieldsTest, require_that_field_can_be_identified) {
+ EXPECT_TRUE(fields.has_field("foo"));
+ EXPECT_TRUE(fields.has_field("bar"));
+ EXPECT_TRUE(fields.has_field("baz"));
+ EXPECT_TRUE(!fields.has_field("foo.a"));
+ EXPECT_TRUE(!fields.has_field("bar.x"));
+ EXPECT_TRUE(!fields.has_field("bogus"));
+}
+
+TEST_F(MatchingElementsFieldsTest, require_that_struct_field_can_be_identified) {
+ EXPECT_TRUE(!fields.has_struct_field("foo"));
+ EXPECT_TRUE(!fields.has_struct_field("bar"));
+ EXPECT_TRUE(!fields.has_struct_field("baz"));
+ EXPECT_TRUE(fields.has_struct_field("foo.a"));
+ EXPECT_TRUE(fields.has_struct_field("bar.x"));
+ EXPECT_TRUE(!fields.has_struct_field("bogus"));
+}
+
+TEST_F(MatchingElementsFieldsTest, require_that_struct_field_maps_to_enclosing_field_name) {
+ EXPECT_EQ(str(fields.get_enclosing_field("foo.a")), str("foo"));
+ EXPECT_EQ(str(fields.get_enclosing_field("foo.b")), str("foo"));
+ EXPECT_EQ(str(fields.get_enclosing_field("bar.x")), str("bar"));
+ EXPECT_EQ(str(fields.get_enclosing_field("bar.y")), str("bar"));
+}
+
+TEST_F(MatchingElementsFieldsTest, require_that_nonexisting_struct_field_maps_to_empty_string) {
+ EXPECT_EQ(str(fields.get_enclosing_field("bogus")), str(""));
+}
+
+GTEST_MAIN_RUN_ALL_TESTS()
diff --git a/searchlib/src/tests/common/struct_field_mapper/CMakeLists.txt b/searchlib/src/tests/common/struct_field_mapper/CMakeLists.txt
deleted file mode 100644
index f5712d22989..00000000000
--- a/searchlib/src/tests/common/struct_field_mapper/CMakeLists.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-vespa_add_executable(searchlib_common_struct_field_mapper_test_app TEST
- SOURCES
- struct_field_mapper_test.cpp
- DEPENDS
- searchlib
- gtest
-)
-vespa_add_test(NAME searchlib_common_struct_field_mapper_test_app COMMAND searchlib_common_struct_field_mapper_test_app)
diff --git a/searchlib/src/tests/common/struct_field_mapper/struct_field_mapper_test.cpp b/searchlib/src/tests/common/struct_field_mapper/struct_field_mapper_test.cpp
deleted file mode 100644
index c5368111859..00000000000
--- a/searchlib/src/tests/common/struct_field_mapper/struct_field_mapper_test.cpp
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-
-#include <vespa/vespalib/gtest/gtest.h>
-#include <vespa/searchlib/common/struct_field_mapper.h>
-
-using namespace search;
-
-namespace {
-
-std::string str(const vespalib::string &s) { return std::string(s.data(), s.size()); }
-
-}
-
-struct StructFieldMapperTest : ::testing::Test {
- StructFieldMapper mapper;
- StructFieldMapperTest() : mapper() {
- mapper.add_mapping("foo", "foo.a");
- mapper.add_mapping("foo", "foo.b");
- mapper.add_mapping("bar", "bar.x");
- mapper.add_mapping("bar", "bar.y");
- }
- ~StructFieldMapperTest() = default;
-};
-
-TEST_F(StructFieldMapperTest, require_that_struct_field_can_be_identified) {
- EXPECT_TRUE(mapper.is_struct_field("foo"));
- EXPECT_TRUE(mapper.is_struct_field("bar"));
- EXPECT_TRUE(!mapper.is_struct_field("foo.a"));
- EXPECT_TRUE(!mapper.is_struct_field("bar.x"));
- EXPECT_TRUE(!mapper.is_struct_field("bogus"));
-}
-
-TEST_F(StructFieldMapperTest, require_that_struct_subfield_can_be_identified) {
- EXPECT_TRUE(!mapper.is_struct_subfield("foo"));
- EXPECT_TRUE(!mapper.is_struct_subfield("bar"));
- EXPECT_TRUE(mapper.is_struct_subfield("foo.a"));
- EXPECT_TRUE(mapper.is_struct_subfield("bar.x"));
- EXPECT_TRUE(!mapper.is_struct_subfield("bogus"));
-}
-
-TEST_F(StructFieldMapperTest, require_that_struct_subfield_maps_to_enclosing_struct_field_name) {
- EXPECT_EQ(str(mapper.get_struct_field("foo.a")), str("foo"));
- EXPECT_EQ(str(mapper.get_struct_field("foo.b")), str("foo"));
- EXPECT_EQ(str(mapper.get_struct_field("bar.x")), str("bar"));
- EXPECT_EQ(str(mapper.get_struct_field("bar.y")), str("bar"));
-}
-
-TEST_F(StructFieldMapperTest, require_that_nonexisting_struct_subfield_maps_to_empty_string) {
- EXPECT_EQ(str(mapper.get_struct_field("bogus")), str(""));
-}
-
-GTEST_MAIN_RUN_ALL_TESTS()
diff --git a/searchlib/src/vespa/searchlib/common/CMakeLists.txt b/searchlib/src/vespa/searchlib/common/CMakeLists.txt
index 36264a2035b..5d30260a169 100644
--- a/searchlib/src/vespa/searchlib/common/CMakeLists.txt
+++ b/searchlib/src/vespa/searchlib/common/CMakeLists.txt
@@ -18,6 +18,7 @@ vespa_add_library(searchlib_common OBJECT
locationiterators.cpp
mapnames.cpp
matching_elements.cpp
+ matching_elements_fields.cpp
packets.cpp
partialbitvector.cpp
resultset.cpp
@@ -26,7 +27,6 @@ vespa_add_library(searchlib_common OBJECT
sortdata.cpp
sortresults.cpp
sortspec.cpp
- struct_field_mapper.cpp
threaded_compactable_lid_space.cpp
tunefileinfo.cpp
DEPENDS
diff --git a/searchlib/src/vespa/searchlib/common/matching_elements.cpp b/searchlib/src/vespa/searchlib/common/matching_elements.cpp
index 1a4653e267b..87049f7d843 100644
--- a/searchlib/src/vespa/searchlib/common/matching_elements.cpp
+++ b/searchlib/src/vespa/searchlib/common/matching_elements.cpp
@@ -9,19 +9,19 @@ MatchingElements::MatchingElements() = default;
MatchingElements::~MatchingElements() = default;
void
-MatchingElements::add_matching_elements(uint32_t docid, const vespalib::string &struct_field_name, const std::vector<uint32_t> &elements)
+MatchingElements::add_matching_elements(uint32_t docid, const vespalib::string &field_name, const std::vector<uint32_t> &elements)
{
- auto &list = _map[key_t(docid, struct_field_name)];
+ auto &list = _map[key_t(docid, field_name)];
std::vector<uint32_t> new_list;
std::set_union(list.begin(), list.end(), elements.begin(), elements.end(), std::back_inserter(new_list));
list = std::move(new_list);
}
const std::vector<uint32_t> &
-MatchingElements::get_matching_elements(uint32_t docid, const vespalib::string &struct_field_name) const
+MatchingElements::get_matching_elements(uint32_t docid, const vespalib::string &field_name) const
{
static const std::vector<uint32_t> empty;
- auto res = _map.find(key_t(docid, struct_field_name));
+ auto res = _map.find(key_t(docid, field_name));
if (res == _map.end()) {
return empty;
}
diff --git a/searchlib/src/vespa/searchlib/common/matching_elements.h b/searchlib/src/vespa/searchlib/common/matching_elements.h
index b31b258ea4c..60fe7167bfd 100644
--- a/searchlib/src/vespa/searchlib/common/matching_elements.h
+++ b/searchlib/src/vespa/searchlib/common/matching_elements.h
@@ -9,8 +9,8 @@
namespace search {
/**
- * Keeps track of which elements matched the query for a set of struct
- * fields across multiple documents.
+ * Keeps track of which elements matched the query for a set of fields
+ * across multiple documents.
**/
class MatchingElements
{
@@ -26,8 +26,8 @@ public:
using UP = std::unique_ptr<MatchingElements>;
- void add_matching_elements(uint32_t docid, const vespalib::string &struct_field_name, const std::vector<uint32_t> &elements);
- const std::vector<uint32_t> &get_matching_elements(uint32_t docid, const vespalib::string &struct_field_name) const;
+ void add_matching_elements(uint32_t docid, const vespalib::string &field_name, const std::vector<uint32_t> &elements);
+ const std::vector<uint32_t> &get_matching_elements(uint32_t docid, const vespalib::string &field_name) const;
};
} // namespace search
diff --git a/searchlib/src/vespa/searchlib/common/matching_elements_fields.cpp b/searchlib/src/vespa/searchlib/common/matching_elements_fields.cpp
new file mode 100644
index 00000000000..b36e1eb333e
--- /dev/null
+++ b/searchlib/src/vespa/searchlib/common/matching_elements_fields.cpp
@@ -0,0 +1,10 @@
+// Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+
+#include "matching_elements_fields.h"
+
+namespace search {
+
+MatchingElementsFields::MatchingElementsFields() = default;
+MatchingElementsFields::~MatchingElementsFields() = default;
+
+} // namespace search
diff --git a/searchlib/src/vespa/searchlib/common/matching_elements_fields.h b/searchlib/src/vespa/searchlib/common/matching_elements_fields.h
new file mode 100644
index 00000000000..f8bb0f373fe
--- /dev/null
+++ b/searchlib/src/vespa/searchlib/common/matching_elements_fields.h
@@ -0,0 +1,51 @@
+// Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+
+#pragma once
+
+#include <vespa/vespalib/stllike/string.h>
+#include <set>
+#include <map>
+
+namespace search {
+
+/**
+ * Keeps track of a set of field names to calculate MatchingElements for.
+ *
+ * Also has mapping of the full name of struct fields into the name of the enclosing field.
+ * Example:
+ * A map<string, string> field "my_map" could contain two struct fields: "my_map.key" and "my_map.value".
+ **/
+class MatchingElementsFields {
+private:
+ std::set<vespalib::string> _fields;
+ std::map<vespalib::string, vespalib::string> _struct_fields;
+
+public:
+ MatchingElementsFields();
+ ~MatchingElementsFields();
+ bool empty() const { return _fields.empty(); }
+ void add_field(const vespalib::string &field_name) {
+ _fields.insert(field_name);
+ }
+ void add_mapping(const vespalib::string &field_name,
+ const vespalib::string &struct_field_name) {
+ _fields.insert(field_name);
+ _struct_fields[struct_field_name] = field_name;
+ }
+ bool has_field(const vespalib::string &field_name) const {
+ return (_fields.count(field_name) > 0);
+ }
+ bool has_struct_field(const vespalib::string &struct_field_name) const {
+ return (_struct_fields.find(struct_field_name) != _struct_fields.end());
+ }
+ const vespalib::string &get_enclosing_field(const vespalib::string &struct_field_name) const {
+ static const vespalib::string empty;
+ auto res = _struct_fields.find(struct_field_name);
+ if (res == _struct_fields.end()) {
+ return empty;
+ }
+ return res->second;
+ }
+};
+
+} // namespace search
diff --git a/searchlib/src/vespa/searchlib/common/struct_field_mapper.cpp b/searchlib/src/vespa/searchlib/common/struct_field_mapper.cpp
deleted file mode 100644
index 849cfd06ade..00000000000
--- a/searchlib/src/vespa/searchlib/common/struct_field_mapper.cpp
+++ /dev/null
@@ -1,10 +0,0 @@
-// Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-
-#include "struct_field_mapper.h"
-
-namespace search {
-
-StructFieldMapper::StructFieldMapper() = default;
-StructFieldMapper::~StructFieldMapper() = default;
-
-} // namespace search
diff --git a/searchlib/src/vespa/searchlib/common/struct_field_mapper.h b/searchlib/src/vespa/searchlib/common/struct_field_mapper.h
deleted file mode 100644
index 1d0604daec3..00000000000
--- a/searchlib/src/vespa/searchlib/common/struct_field_mapper.h
+++ /dev/null
@@ -1,48 +0,0 @@
-// Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-
-#pragma once
-
-#include <vespa/vespalib/stllike/string.h>
-#include <set>
-#include <map>
-
-namespace search {
-
-/**
- * Keeps track of a set of struct field names and enables mapping the
- * full name of struct subfields into the name of the enclosing struct
- * field.
- **/
-class StructFieldMapper
-{
-private:
- std::set<vespalib::string> _struct_fields;
- std::map<vespalib::string,vespalib::string> _struct_subfields;
-
-public:
- StructFieldMapper();
- ~StructFieldMapper();
- bool empty() const { return _struct_fields.empty(); }
- void add_mapping(const vespalib::string &struct_field_name,
- const vespalib::string &struct_subfield_name)
- {
- _struct_fields.insert(struct_field_name);
- _struct_subfields[struct_subfield_name] = struct_field_name;
- }
- bool is_struct_field(const vespalib::string &field_name) const {
- return (_struct_fields.count(field_name) > 0);
- }
- bool is_struct_subfield(const vespalib::string &field_name) const {
- return (_struct_subfields.find(field_name) != _struct_subfields.end());
- }
- const vespalib::string &get_struct_field(const vespalib::string &struct_subfield_name) const {
- static const vespalib::string empty;
- auto res = _struct_subfields.find(struct_subfield_name);
- if (res == _struct_subfields.end()) {
- return empty;
- }
- return res->second;
- }
-};
-
-} // namespace search
diff --git a/searchlib/src/vespa/searchlib/queryeval/same_element_blueprint.cpp b/searchlib/src/vespa/searchlib/queryeval/same_element_blueprint.cpp
index d1e0a2528e7..ac4f164b09f 100644
--- a/searchlib/src/vespa/searchlib/queryeval/same_element_blueprint.cpp
+++ b/searchlib/src/vespa/searchlib/queryeval/same_element_blueprint.cpp
@@ -11,12 +11,12 @@
namespace search::queryeval {
-SameElementBlueprint::SameElementBlueprint(const vespalib::string &struct_field_name_in, bool expensive)
+SameElementBlueprint::SameElementBlueprint(const vespalib::string &field_name_in, bool expensive)
: ComplexLeafBlueprint(FieldSpecBaseList()),
_estimate(),
_layout(),
_terms(),
- _struct_field_name(struct_field_name_in)
+ _field_name(field_name_in)
{
if (expensive) {
set_cost_tier(State::COST_TIER_EXPENSIVE);
diff --git a/searchlib/src/vespa/searchlib/queryeval/same_element_blueprint.h b/searchlib/src/vespa/searchlib/queryeval/same_element_blueprint.h
index fc19abe4c5e..8d647ac3a32 100644
--- a/searchlib/src/vespa/searchlib/queryeval/same_element_blueprint.h
+++ b/searchlib/src/vespa/searchlib/queryeval/same_element_blueprint.h
@@ -17,10 +17,10 @@ private:
HitEstimate _estimate;
fef::MatchDataLayout _layout;
std::vector<Blueprint::UP> _terms;
- vespalib::string _struct_field_name;
+ vespalib::string _field_name;
public:
- SameElementBlueprint(const vespalib::string &struct_field_name_in, bool expensive);
+ SameElementBlueprint(const vespalib::string &field_name_in, bool expensive);
SameElementBlueprint(const SameElementBlueprint &) = delete;
SameElementBlueprint &operator=(const SameElementBlueprint &) = delete;
~SameElementBlueprint();
@@ -42,7 +42,7 @@ public:
bool strict) const override;
void visitMembers(vespalib::ObjectVisitor &visitor) const override;
const std::vector<Blueprint::UP> &terms() const { return _terms; }
- const vespalib::string &struct_field_name() const { return _struct_field_name; }
+ const vespalib::string &field_name() const { return _field_name; }
};
}
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 7a82187f355..ae8e5f88c28 100644
--- a/searchsummary/src/tests/docsummary/attribute_combiner/attribute_combiner_test.cpp
+++ b/searchsummary/src/tests/docsummary/attribute_combiner/attribute_combiner_test.cpp
@@ -9,7 +9,7 @@
#include <vespa/searchlib/attribute/integerbase.h>
#include <vespa/searchlib/attribute/stringbase.h>
#include <vespa/searchlib/common/matching_elements.h>
-#include <vespa/searchlib/common/struct_field_mapper.h>
+#include <vespa/searchlib/common/matching_elements_fields.h>
#include <vespa/searchlib/util/slime_output_raw_buf_adapter.h>
#include <vespa/searchsummary/docsummary/docsumstate.h>
#include <vespa/searchsummary/docsummary/docsum_field_writer_state.h>
@@ -171,7 +171,7 @@ public:
void FillSummaryFeatures(GetDocsumsState *, IDocsumEnvironment *) override { }
void FillRankFeatures(GetDocsumsState *, IDocsumEnvironment *) override { }
void ParseLocation(GetDocsumsState *) override { }
- std::unique_ptr<MatchingElements> fill_matching_elements(const search::StructFieldMapper &) override { return std::make_unique<MatchingElements>(_matching_elements); }
+ std::unique_ptr<MatchingElements> fill_matching_elements(const search::MatchingElementsFields &) override { return std::make_unique<MatchingElements>(_matching_elements); }
~DummyStateCallback() override { }
};
@@ -196,7 +196,7 @@ struct AttributeCombinerTest : public ::testing::Test
std::unique_ptr<IDocsumFieldWriter> writer;
DummyStateCallback stateCallback;
GetDocsumsState state;
- std::shared_ptr<search::StructFieldMapper> _struct_field_mapper;
+ std::shared_ptr<search::MatchingElementsFields> _matching_elems_fields;
AttributeCombinerTest();
~AttributeCombinerTest();
@@ -209,7 +209,7 @@ AttributeCombinerTest::AttributeCombinerTest()
writer(),
stateCallback(),
state(stateCallback),
- _struct_field_mapper()
+ _matching_elems_fields()
{
state._attrCtx = attrs.mgr.createContext();
}
@@ -220,9 +220,9 @@ void
AttributeCombinerTest::set_field(const vespalib::string &field_name, bool filter_elements)
{
if (filter_elements) {
- _struct_field_mapper = std::make_shared<search::StructFieldMapper>();
+ _matching_elems_fields = std::make_shared<search::MatchingElementsFields>();
}
- writer = AttributeCombinerDFW::create(field_name, *state._attrCtx, filter_elements, _struct_field_mapper);
+ writer = AttributeCombinerDFW::create(field_name, *state._attrCtx, filter_elements, _matching_elems_fields);
EXPECT_TRUE(writer->setFieldWriterStateIndex(0));
state._fieldWriterStates.resize(1);
}
@@ -308,43 +308,43 @@ TEST_F(AttributeCombinerTest, require_that_attribute_combiner_dfw_generates_corr
assertWritten("null", 5);
}
-TEST_F(AttributeCombinerTest, require_that_struct_field_mapper_is_setup_for_filtered_array_of_struct)
+TEST_F(AttributeCombinerTest, require_that_matching_elems_fields_is_setup_for_filtered_array_of_struct)
{
set_field("array", true);
- EXPECT_TRUE(_struct_field_mapper);
- EXPECT_TRUE(_struct_field_mapper->is_struct_field("array"));
- EXPECT_FALSE(_struct_field_mapper->is_struct_field("map"));
- EXPECT_FALSE(_struct_field_mapper->is_struct_field("smap"));
- EXPECT_EQ("", _struct_field_mapper->get_struct_field("array.foo"));
- EXPECT_EQ("array", _struct_field_mapper->get_struct_field("array.name"));
- EXPECT_EQ("array", _struct_field_mapper->get_struct_field("array.val"));
- EXPECT_EQ("array", _struct_field_mapper->get_struct_field("array.fval"));
+ EXPECT_TRUE(_matching_elems_fields);
+ EXPECT_TRUE(_matching_elems_fields->has_field("array"));
+ EXPECT_FALSE(_matching_elems_fields->has_field("map"));
+ EXPECT_FALSE(_matching_elems_fields->has_field("smap"));
+ EXPECT_EQ("", _matching_elems_fields->get_enclosing_field("array.foo"));
+ EXPECT_EQ("array", _matching_elems_fields->get_enclosing_field("array.name"));
+ EXPECT_EQ("array", _matching_elems_fields->get_enclosing_field("array.val"));
+ EXPECT_EQ("array", _matching_elems_fields->get_enclosing_field("array.fval"));
}
-TEST_F(AttributeCombinerTest, require_that_struct_field_mapper_is_setup_for_filtered_map_of_struct)
+TEST_F(AttributeCombinerTest, require_that_matching_elems_fields_is_setup_for_filtered_map_of_struct)
{
set_field("smap", true);
- EXPECT_TRUE(_struct_field_mapper);
- EXPECT_FALSE(_struct_field_mapper->is_struct_field("array"));
- EXPECT_FALSE(_struct_field_mapper->is_struct_field("map"));
- EXPECT_TRUE(_struct_field_mapper->is_struct_field("smap"));
- EXPECT_EQ("", _struct_field_mapper->get_struct_field("smap.foo"));
- EXPECT_EQ("smap", _struct_field_mapper->get_struct_field("smap.key"));
- EXPECT_EQ("smap", _struct_field_mapper->get_struct_field("smap.value.name"));
- EXPECT_EQ("smap", _struct_field_mapper->get_struct_field("smap.value.val"));
- EXPECT_EQ("smap", _struct_field_mapper->get_struct_field("smap.value.fval"));
+ EXPECT_TRUE(_matching_elems_fields);
+ EXPECT_FALSE(_matching_elems_fields->has_field("array"));
+ EXPECT_FALSE(_matching_elems_fields->has_field("map"));
+ EXPECT_TRUE(_matching_elems_fields->has_field("smap"));
+ EXPECT_EQ("", _matching_elems_fields->get_enclosing_field("smap.foo"));
+ EXPECT_EQ("smap", _matching_elems_fields->get_enclosing_field("smap.key"));
+ EXPECT_EQ("smap", _matching_elems_fields->get_enclosing_field("smap.value.name"));
+ EXPECT_EQ("smap", _matching_elems_fields->get_enclosing_field("smap.value.val"));
+ EXPECT_EQ("smap", _matching_elems_fields->get_enclosing_field("smap.value.fval"));
}
-TEST_F(AttributeCombinerTest, require_that_struct_field_mapper_is_setup_for_filtered_map_of_string)
+TEST_F(AttributeCombinerTest, require_that_matching_elems_fields_is_setup_for_filtered_map_of_string)
{
set_field("map", true);
- EXPECT_TRUE(_struct_field_mapper);
- EXPECT_FALSE(_struct_field_mapper->is_struct_field("array"));
- EXPECT_TRUE(_struct_field_mapper->is_struct_field("map"));
- EXPECT_FALSE(_struct_field_mapper->is_struct_field("smap"));
- EXPECT_EQ("", _struct_field_mapper->get_struct_field("map.foo"));
- EXPECT_EQ("map", _struct_field_mapper->get_struct_field("map.key"));
- EXPECT_EQ("map", _struct_field_mapper->get_struct_field("map.value"));
+ EXPECT_TRUE(_matching_elems_fields);
+ EXPECT_FALSE(_matching_elems_fields->has_field("array"));
+ EXPECT_TRUE(_matching_elems_fields->has_field("map"));
+ EXPECT_FALSE(_matching_elems_fields->has_field("smap"));
+ EXPECT_EQ("", _matching_elems_fields->get_enclosing_field("map.foo"));
+ EXPECT_EQ("map", _matching_elems_fields->get_enclosing_field("map.key"));
+ EXPECT_EQ("map", _matching_elems_fields->get_enclosing_field("map.value"));
}
}
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 dff3acc5b89..ed91d4a88eb 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
@@ -7,7 +7,7 @@
#include <vespa/searchlib/attribute/attributefactory.h>
#include <vespa/searchlib/attribute/attributevector.h>
#include <vespa/searchlib/common/matching_elements.h>
-#include <vespa/searchlib/common/struct_field_mapper.h>
+#include <vespa/searchlib/common/matching_elements_fields.h>
#include <vespa/searchlib/util/slime_output_raw_buf_adapter.h>
#include <vespa/searchsummary/docsummary/docsumstate.h>
#include <vespa/searchsummary/docsummary/idocsumenvironment.h>
@@ -26,7 +26,7 @@ LOG_SETUP("matched_elements_filter_test");
using search::AttributeFactory;
using search::AttributeVector;
using search::MatchingElements;
-using search::StructFieldMapper;
+using search::MatchingElementsFields;
using search::attribute::BasicType;
using search::attribute::CollectionType;
using search::attribute::Config;
@@ -178,7 +178,7 @@ public:
void FillSummaryFeatures(GetDocsumsState*, IDocsumEnvironment*) override {}
void FillRankFeatures(GetDocsumsState*, IDocsumEnvironment*) override {}
void ParseLocation(GetDocsumsState*) override {}
- std::unique_ptr<MatchingElements> fill_matching_elements(const StructFieldMapper&) override {
+ std::unique_ptr<MatchingElements> fill_matching_elements(const MatchingElementsFields&) override {
auto result = std::make_unique<MatchingElements>();
result->add_matching_elements(doc_id, _field_name, _matching_elements);
return result;
@@ -189,7 +189,7 @@ class MatchedElementsFilterTest : public ::testing::Test {
private:
DocsumStore _doc_store;
AttributeContext _attr_ctx;
- std::shared_ptr<StructFieldMapper> _mapper;
+ std::shared_ptr<MatchingElementsFields> _fields;
Slime run_filter_field_writer(const std::string& input_field_name, const ElementVector& matching_elements) {
auto writer = make_field_writer(input_field_name);
@@ -209,21 +209,21 @@ public:
MatchedElementsFilterTest()
: _doc_store(),
_attr_ctx(),
- _mapper(std::make_shared<StructFieldMapper>())
+ _fields(std::make_shared<MatchingElementsFields>())
{
}
~MatchedElementsFilterTest() {}
std::unique_ptr<IDocsumFieldWriter> make_field_writer(const std::string& input_field_name) {
int input_field_enum = _doc_store.get_config().GetFieldNameEnum().Lookup(input_field_name.c_str());
return MatchedElementsFilterDFW::create(input_field_name, input_field_enum,
- _attr_ctx, _mapper);
+ _attr_ctx, _fields);
}
void expect_filtered(const std::string& input_field_name, const ElementVector& matching_elements, const std::string& exp_slime_as_json) {
Slime act = run_filter_field_writer(input_field_name, matching_elements);
SlimeValue exp(exp_slime_as_json);
EXPECT_EQ(exp.slime, act);
}
- const StructFieldMapper& mapper() const { return *_mapper; }
+ const MatchingElementsFields& fields() const { return *_fields; }
};
TEST_F(MatchedElementsFilterTest, filters_elements_in_array_field_value)
@@ -249,12 +249,12 @@ TEST_F(MatchedElementsFilterTest, filters_elements_in_array_field_value_when_inp
expect_filtered("array_in_doc", {0, 1, 100}, "[]");
}
-TEST_F(MatchedElementsFilterTest, struct_field_mapper_is_setup_for_array_field_value)
+TEST_F(MatchedElementsFilterTest, matching_elements_fields_is_setup_for_array_field_value)
{
auto writer = make_field_writer("array");
- EXPECT_TRUE(mapper().is_struct_field("array"));
- EXPECT_EQ("", mapper().get_struct_field("array.name"));
- EXPECT_EQ("array", mapper().get_struct_field("array.weight"));
+ EXPECT_TRUE(fields().has_field("array"));
+ EXPECT_EQ("", fields().get_enclosing_field("array.name"));
+ EXPECT_EQ("array", fields().get_enclosing_field("array.weight"));
}
TEST_F(MatchedElementsFilterTest, filters_elements_in_map_field_value)
@@ -280,21 +280,21 @@ TEST_F(MatchedElementsFilterTest, filters_elements_in_map_field_value_when_input
expect_filtered("map_in_doc", {0, 1, 100}, "[]");
}
-TEST_F(MatchedElementsFilterTest, struct_field_mapper_is_setup_for_map_field_value)
+TEST_F(MatchedElementsFilterTest, matching_elements_fields_is_setup_for_map_field_value)
{
{
auto writer = make_field_writer("map");
- EXPECT_TRUE(mapper().is_struct_field("map"));
- EXPECT_EQ("", mapper().get_struct_field("map.key"));
- EXPECT_EQ("map", mapper().get_struct_field("map.value.name"));
- EXPECT_EQ("", mapper().get_struct_field("map.value.weight"));
+ EXPECT_TRUE(fields().has_field("map"));
+ EXPECT_EQ("", fields().get_enclosing_field("map.key"));
+ EXPECT_EQ("map", fields().get_enclosing_field("map.value.name"));
+ EXPECT_EQ("", fields().get_enclosing_field("map.value.weight"));
}
{
auto writer = make_field_writer("map2");
- EXPECT_TRUE(mapper().is_struct_field("map2"));
- EXPECT_EQ("map2", mapper().get_struct_field("map2.key"));
- EXPECT_EQ("", mapper().get_struct_field("map2.value.name"));
- EXPECT_EQ("", mapper().get_struct_field("map2.value.weight"));
+ EXPECT_TRUE(fields().has_field("map2"));
+ EXPECT_EQ("map2", fields().get_enclosing_field("map2.key"));
+ EXPECT_EQ("", fields().get_enclosing_field("map2.value.name"));
+ EXPECT_EQ("", fields().get_enclosing_field("map2.value.weight"));
}
}
diff --git a/searchsummary/src/tests/docsummary/positionsdfw_test.cpp b/searchsummary/src/tests/docsummary/positionsdfw_test.cpp
index 4cad98a8e01..f54b4c19dc3 100644
--- a/searchsummary/src/tests/docsummary/positionsdfw_test.cpp
+++ b/searchsummary/src/tests/docsummary/positionsdfw_test.cpp
@@ -110,7 +110,7 @@ struct MyGetDocsumsStateCallback : GetDocsumsStateCallback {
virtual void FillSummaryFeatures(GetDocsumsState *, IDocsumEnvironment *) override {}
virtual void FillRankFeatures(GetDocsumsState *, IDocsumEnvironment *) override {}
virtual void ParseLocation(GetDocsumsState *) override {}
- std::unique_ptr<MatchingElements> fill_matching_elements(const StructFieldMapper &) override { abort(); }
+ std::unique_ptr<MatchingElements> fill_matching_elements(const MatchingElementsFields &) override { abort(); }
};
template <typename AttrType>
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 5b74666cbec..6fceef37f09 100644
--- a/searchsummary/src/tests/docsummary/slime_summary/slime_summary_test.cpp
+++ b/searchsummary/src/tests/docsummary/slime_summary/slime_summary_test.cpp
@@ -78,7 +78,7 @@ struct DocsumFixture : IDocsumStore, GetDocsumsStateCallback {
void FillSummaryFeatures(GetDocsumsState *, IDocsumEnvironment *) override { }
void FillRankFeatures(GetDocsumsState *, IDocsumEnvironment *) override { }
void ParseLocation(GetDocsumsState *) override { }
- std::unique_ptr<MatchingElements> fill_matching_elements(const search::StructFieldMapper &) override { abort(); }
+ std::unique_ptr<MatchingElements> fill_matching_elements(const search::MatchingElementsFields &) override { abort(); }
};
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/array_attribute_combiner_dfw.cpp b/searchsummary/src/vespa/searchsummary/docsummary/array_attribute_combiner_dfw.cpp
index 4e3cbaa512d..7a656eb0422 100644
--- a/searchsummary/src/vespa/searchsummary/docsummary/array_attribute_combiner_dfw.cpp
+++ b/searchsummary/src/vespa/searchsummary/docsummary/array_attribute_combiner_dfw.cpp
@@ -7,7 +7,7 @@
#include <vespa/searchcommon/attribute/iattributecontext.h>
#include <vespa/searchcommon/attribute/iattributevector.h>
#include <vespa/searchlib/common/matching_elements.h>
-#include <vespa/searchlib/common/struct_field_mapper.h>
+#include <vespa/searchlib/common/matching_elements_fields.h>
#include <vespa/vespalib/data/slime/cursor.h>
#include <cassert>
@@ -105,14 +105,14 @@ ArrayAttributeFieldWriterState::insertField(uint32_t docId, vespalib::slime::Ins
ArrayAttributeCombinerDFW::ArrayAttributeCombinerDFW(const vespalib::string &fieldName,
const StructFieldsResolver& fields_resolver,
bool filter_elements,
- std::shared_ptr<StructFieldMapper> struct_field_mapper)
- : AttributeCombinerDFW(fieldName, filter_elements, std::move(struct_field_mapper)),
+ std::shared_ptr<MatchingElementsFields> matching_elems_fields)
+ : AttributeCombinerDFW(fieldName, filter_elements, std::move(matching_elems_fields)),
_fields(fields_resolver.get_array_fields()),
_attributeNames(fields_resolver.get_array_attributes()),
_is_map_of_scalar(fields_resolver.is_map_of_scalar())
{
- if (filter_elements && _struct_field_mapper && !_struct_field_mapper->is_struct_field(fieldName)) {
- fields_resolver.apply_to(*_struct_field_mapper);
+ if (filter_elements && _matching_elems_fields && !_matching_elems_fields->has_field(fieldName)) {
+ fields_resolver.apply_to(*_matching_elems_fields);
}
}
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/array_attribute_combiner_dfw.h b/searchsummary/src/vespa/searchsummary/docsummary/array_attribute_combiner_dfw.h
index 2fda1f69572..742128a229d 100644
--- a/searchsummary/src/vespa/searchsummary/docsummary/array_attribute_combiner_dfw.h
+++ b/searchsummary/src/vespa/searchsummary/docsummary/array_attribute_combiner_dfw.h
@@ -27,7 +27,7 @@ public:
ArrayAttributeCombinerDFW(const vespalib::string &fieldName,
const StructFieldsResolver& fields_resolver,
bool filter_elements,
- std::shared_ptr<StructFieldMapper> struct_field_mapper);
+ std::shared_ptr<MatchingElementsFields> matching_elems_fields);
~ArrayAttributeCombinerDFW() override;
};
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/attribute_combiner_dfw.cpp b/searchsummary/src/vespa/searchsummary/docsummary/attribute_combiner_dfw.cpp
index 8eb77c0ed9c..4ad42133f14 100644
--- a/searchsummary/src/vespa/searchsummary/docsummary/attribute_combiner_dfw.cpp
+++ b/searchsummary/src/vespa/searchsummary/docsummary/attribute_combiner_dfw.cpp
@@ -6,7 +6,7 @@
#include "docsumstate.h"
#include "struct_fields_resolver.h"
#include "struct_map_attribute_combiner_dfw.h"
-#include <vespa/searchlib/common/struct_field_mapper.h>
+#include <vespa/searchlib/common/matching_elements_fields.h>
#include <algorithm>
#include <vespa/log/log.h>
@@ -16,12 +16,13 @@ using search::attribute::IAttributeContext;
namespace search::docsummary {
-AttributeCombinerDFW::AttributeCombinerDFW(const vespalib::string &fieldName, bool filter_elements, std::shared_ptr<StructFieldMapper> struct_field_mapper)
+AttributeCombinerDFW::AttributeCombinerDFW(const vespalib::string &fieldName, bool filter_elements,
+ std::shared_ptr<MatchingElementsFields> matching_elems_fields)
: ISimpleDFW(),
_stateIndex(0),
_filter_elements(filter_elements),
_fieldName(fieldName),
- _struct_field_mapper(std::move(struct_field_mapper))
+ _matching_elems_fields(std::move(matching_elems_fields))
{
}
@@ -41,15 +42,16 @@ AttributeCombinerDFW::setFieldWriterStateIndex(uint32_t fieldWriterStateIndex)
}
std::unique_ptr<IDocsumFieldWriter>
-AttributeCombinerDFW::create(const vespalib::string &fieldName, IAttributeContext &attrCtx, bool filter_elements, std::shared_ptr<StructFieldMapper> struct_field_mapper)
+AttributeCombinerDFW::create(const vespalib::string &fieldName, IAttributeContext &attrCtx, bool filter_elements,
+ std::shared_ptr<MatchingElementsFields> matching_elems_fields)
{
StructFieldsResolver structFields(fieldName, attrCtx, true);
if (structFields.has_error()) {
return std::unique_ptr<IDocsumFieldWriter>();
} else if (structFields.is_map_of_struct()) {
- return std::make_unique<StructMapAttributeCombinerDFW>(fieldName, structFields, filter_elements, std::move(struct_field_mapper));
+ return std::make_unique<StructMapAttributeCombinerDFW>(fieldName, structFields, filter_elements, std::move(matching_elems_fields));
}
- return std::make_unique<ArrayAttributeCombinerDFW>(fieldName, structFields, filter_elements, std::move(struct_field_mapper));
+ return std::make_unique<ArrayAttributeCombinerDFW>(fieldName, structFields, filter_elements, std::move(matching_elems_fields));
}
void
@@ -59,7 +61,7 @@ AttributeCombinerDFW::insertField(uint32_t docid, GetDocsumsState *state, ResTyp
if (!fieldWriterState) {
const MatchingElements *matching_elements = nullptr;
if (_filter_elements) {
- matching_elements = &state->get_matching_elements(*_struct_field_mapper);
+ matching_elements = &state->get_matching_elements(*_matching_elems_fields);
}
fieldWriterState = allocFieldWriterState(*state->_attrCtx, matching_elements);
}
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/attribute_combiner_dfw.h b/searchsummary/src/vespa/searchsummary/docsummary/attribute_combiner_dfw.h
index a8ab5f2f8f5..bb635d4d280 100644
--- a/searchsummary/src/vespa/searchsummary/docsummary/attribute_combiner_dfw.h
+++ b/searchsummary/src/vespa/searchsummary/docsummary/attribute_combiner_dfw.h
@@ -6,7 +6,7 @@
namespace search {
class MatchingElements;
-class StructFieldMapper;
+class MatchingElementsFields;
}
namespace search::attribute { class IAttributeContext; }
@@ -25,15 +25,17 @@ protected:
uint32_t _stateIndex;
const bool _filter_elements;
vespalib::string _fieldName;
- std::shared_ptr<StructFieldMapper> _struct_field_mapper;
- AttributeCombinerDFW(const vespalib::string &fieldName, bool filter_elements, std::shared_ptr<StructFieldMapper> struct_field_mapper);
+ std::shared_ptr<MatchingElementsFields> _matching_elems_fields;
+ AttributeCombinerDFW(const vespalib::string &fieldName, bool filter_elements,
+ std::shared_ptr<MatchingElementsFields> matching_elems_fields);
protected:
virtual std::unique_ptr<DocsumFieldWriterState> allocFieldWriterState(search::attribute::IAttributeContext &context, const MatchingElements* matching_elements) = 0;
public:
~AttributeCombinerDFW() override;
bool IsGenerated() const override;
bool setFieldWriterStateIndex(uint32_t fieldWriterStateIndex) override;
- static std::unique_ptr<IDocsumFieldWriter> create(const vespalib::string &fieldName, search::attribute::IAttributeContext &attrCtx, bool filter_elements, std::shared_ptr<StructFieldMapper> struct_field_mapper);
+ static std::unique_ptr<IDocsumFieldWriter> create(const vespalib::string &fieldName, search::attribute::IAttributeContext &attrCtx,
+ bool filter_elements, std::shared_ptr<MatchingElementsFields> matching_elems_fields);
void insertField(uint32_t docid, GetDocsumsState *state, ResType type, vespalib::slime::Inserter &target) override;
};
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/docsumconfig.cpp b/searchsummary/src/vespa/searchsummary/docsummary/docsumconfig.cpp
index 9235ce2b181..2c3366cb94d 100644
--- a/searchsummary/src/vespa/searchsummary/docsummary/docsumconfig.cpp
+++ b/searchsummary/src/vespa/searchsummary/docsummary/docsumconfig.cpp
@@ -10,7 +10,7 @@
#include "positionsdfw.h"
#include "rankfeaturesdfw.h"
#include "textextractordfw.h"
-#include <vespa/searchlib/common/struct_field_mapper.h>
+#include <vespa/searchlib/common/matching_elements_fields.h>
#include <vespa/vespalib/util/stringfmt.h>
#include <vespa/vespalib/util/exceptions.h>
@@ -25,7 +25,7 @@ DynamicDocsumConfig::getResultConfig() const {
}
IDocsumFieldWriter::UP
-DynamicDocsumConfig::createFieldWriter(const string & fieldName, const string & overrideName, const string & argument, bool & rc, std::shared_ptr<StructFieldMapper> struct_field_mapper)
+DynamicDocsumConfig::createFieldWriter(const string & fieldName, const string & overrideName, const string & argument, bool & rc, std::shared_ptr<MatchingElementsFields> matching_elems_fields)
{
const ResultConfig & resultConfig = getResultConfig();
rc = false;
@@ -97,14 +97,14 @@ DynamicDocsumConfig::createFieldWriter(const string & fieldName, const string &
} else if (overrideName == "attributecombiner") {
if (getEnvironment() && getEnvironment()->getAttributeManager()) {
auto attr_ctx = getEnvironment()->getAttributeManager()->createContext();
- fieldWriter = AttributeCombinerDFW::create(fieldName, *attr_ctx, false, std::shared_ptr<StructFieldMapper>());
+ fieldWriter = AttributeCombinerDFW::create(fieldName, *attr_ctx, false, std::shared_ptr<MatchingElementsFields>());
rc = static_cast<bool>(fieldWriter);
}
} else if (overrideName == "matchedattributeelementsfilter") {
string source_field = argument.empty() ? fieldName : argument;
if (getEnvironment() && getEnvironment()->getAttributeManager()) {
auto attr_ctx = getEnvironment()->getAttributeManager()->createContext();
- fieldWriter = AttributeCombinerDFW::create(source_field, *attr_ctx, true, struct_field_mapper);
+ fieldWriter = AttributeCombinerDFW::create(source_field, *attr_ctx, true, matching_elems_fields);
rc = static_cast<bool>(fieldWriter);
}
} else if (overrideName == "matchedelementsfilter") {
@@ -112,7 +112,7 @@ DynamicDocsumConfig::createFieldWriter(const string & fieldName, const string &
if (getEnvironment() && getEnvironment()->getAttributeManager()) {
auto attr_ctx = getEnvironment()->getAttributeManager()->createContext();
fieldWriter = MatchedElementsFilterDFW::create(source_field, resultConfig.GetFieldNameEnum().Lookup(source_field.c_str()),
- *attr_ctx, struct_field_mapper);
+ *attr_ctx, matching_elems_fields);
rc = static_cast<bool>(fieldWriter);
}
} else {
@@ -125,14 +125,14 @@ void
DynamicDocsumConfig::configure(const vespa::config::search::SummarymapConfig &cfg)
{
std::vector<string> strCfg;
- auto struct_field_mapper = std::make_shared<StructFieldMapper>();
+ auto matching_elems_fields = std::make_shared<MatchingElementsFields>();
if ((cfg.defaultoutputclass != -1) && !_writer->SetDefaultOutputClass(cfg.defaultoutputclass)) {
throw IllegalArgumentException(make_string("could not set default output class to %d", cfg.defaultoutputclass));
}
for (size_t i = 0; i < cfg.override.size(); ++i) {
const vespa::config::search::SummarymapConfig::Override & o = cfg.override[i];
bool rc(false);
- IDocsumFieldWriter::UP fieldWriter = createFieldWriter(o.field, o.command, o.arguments, rc, struct_field_mapper);
+ IDocsumFieldWriter::UP fieldWriter = createFieldWriter(o.field, o.command, o.arguments, rc, matching_elems_fields);
if (rc && fieldWriter.get() != NULL) {
rc = _writer->Override(o.field.c_str(), fieldWriter.release()); // OBJECT HAND-OVER
}
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/docsumconfig.h b/searchsummary/src/vespa/searchsummary/docsummary/docsumconfig.h
index 34ca49824c5..f6f1939cc62 100644
--- a/searchsummary/src/vespa/searchsummary/docsummary/docsumconfig.h
+++ b/searchsummary/src/vespa/searchsummary/docsummary/docsumconfig.h
@@ -4,7 +4,7 @@
#include <vespa/config-summarymap.h>
-namespace search { class StructFieldMapper; }
+namespace search { class MatchingElementsFields; }
namespace search::docsummary {
class IDocsumEnvironment;
@@ -29,7 +29,7 @@ protected:
virtual std::unique_ptr<IDocsumFieldWriter>
createFieldWriter(const string & fieldName, const string & overrideName,
- const string & argument, bool & rc, std::shared_ptr<StructFieldMapper> struct_field_mapper);
+ const string & argument, bool & rc, std::shared_ptr<MatchingElementsFields> matching_elems_fields);
private:
IDocsumEnvironment * _env;
DynamicDocsumWriter * _writer;
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/docsumstate.cpp b/searchsummary/src/vespa/searchsummary/docsummary/docsumstate.cpp
index 3270e4b4c98..ebbf97e9f55 100644
--- a/searchsummary/src/vespa/searchsummary/docsummary/docsumstate.cpp
+++ b/searchsummary/src/vespa/searchsummary/docsummary/docsumstate.cpp
@@ -50,10 +50,10 @@ GetDocsumsState::~GetDocsumsState()
}
const MatchingElements &
-GetDocsumsState::get_matching_elements(const StructFieldMapper &struct_field_mapper)
+GetDocsumsState::get_matching_elements(const MatchingElementsFields &matching_elems_fields)
{
if (!_matching_elements) {
- _matching_elements = _callback.fill_matching_elements(struct_field_mapper);
+ _matching_elements = _callback.fill_matching_elements(matching_elems_fields);
}
return *_matching_elements;
}
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/docsumstate.h b/searchsummary/src/vespa/searchsummary/docsummary/docsumstate.h
index 350e2410c9d..57cae341682 100644
--- a/searchsummary/src/vespa/searchsummary/docsummary/docsumstate.h
+++ b/searchsummary/src/vespa/searchsummary/docsummary/docsumstate.h
@@ -15,7 +15,7 @@ namespace juniper {
namespace search {
class MatchingElements;
-class StructFieldMapper;
+class MatchingElementsFields;
}
namespace search::common { class Location; }
namespace search::attribute {
@@ -35,7 +35,7 @@ public:
virtual void FillSummaryFeatures(GetDocsumsState * state, IDocsumEnvironment * env) = 0;
virtual void FillRankFeatures(GetDocsumsState * state, IDocsumEnvironment * env) = 0;
virtual void ParseLocation(GetDocsumsState * state) = 0;
- virtual std::unique_ptr<MatchingElements> fill_matching_elements(const StructFieldMapper &struct_field_mapper) = 0;
+ virtual std::unique_ptr<MatchingElements> fill_matching_elements(const MatchingElementsFields &matching_elems_fields) = 0;
virtual ~GetDocsumsStateCallback(void) { }
GetDocsumsStateCallback(const GetDocsumsStateCallback &) = delete;
GetDocsumsStateCallback & operator = (const GetDocsumsStateCallback &) = delete;
@@ -96,7 +96,7 @@ public:
GetDocsumsState& operator=(const GetDocsumsState &) = delete;
GetDocsumsState(GetDocsumsStateCallback &callback);
~GetDocsumsState();
- const MatchingElements &get_matching_elements(const StructFieldMapper &struct_field_mapper);
+ const MatchingElements &get_matching_elements(const MatchingElementsFields &matching_elems_fields);
};
}
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 443634b3e3f..6991d3acb29 100644
--- a/searchsummary/src/vespa/searchsummary/docsummary/matched_elements_filter_dfw.cpp
+++ b/searchsummary/src/vespa/searchsummary/docsummary/matched_elements_filter_dfw.cpp
@@ -8,7 +8,7 @@
#include <vespa/document/fieldvalue/literalfieldvalue.h>
#include <vespa/searchcommon/attribute/iattributecontext.h>
#include <vespa/searchlib/common/matching_elements.h>
-#include <vespa/searchlib/common/struct_field_mapper.h>
+#include <vespa/searchlib/common/matching_elements_fields.h>
#include <vespa/vespalib/data/slime/binary_format.h>
#include <vespa/vespalib/data/slime/slime.h>
#include <vespa/vespalib/data/smart_buffer.h>
@@ -29,35 +29,35 @@ namespace search::docsummary {
const std::vector<uint32_t>&
MatchedElementsFilterDFW::get_matching_elements(uint32_t docid, GetDocsumsState& state) const
{
- return state.get_matching_elements(*_struct_field_mapper).get_matching_elements(docid, _input_field_name);
+ return state.get_matching_elements(*_matching_elems_fields).get_matching_elements(docid, _input_field_name);
}
MatchedElementsFilterDFW::MatchedElementsFilterDFW(const std::string& input_field_name, uint32_t input_field_enum,
- std::shared_ptr<StructFieldMapper> struct_field_mapper)
+ std::shared_ptr<MatchingElementsFields> matching_elems_fields)
: _input_field_name(input_field_name),
_input_field_enum(input_field_enum),
- _struct_field_mapper(std::move(struct_field_mapper))
+ _matching_elems_fields(std::move(matching_elems_fields))
{
}
std::unique_ptr<IDocsumFieldWriter>
MatchedElementsFilterDFW::create(const std::string& input_field_name, uint32_t input_field_enum,
- std::shared_ptr<StructFieldMapper> struct_field_mapper)
+ std::shared_ptr<MatchingElementsFields> matching_elems_fields)
{
- return std::make_unique<MatchedElementsFilterDFW>(input_field_name, input_field_enum, std::move(struct_field_mapper));
+ return std::make_unique<MatchedElementsFilterDFW>(input_field_name, input_field_enum, std::move(matching_elems_fields));
}
std::unique_ptr<IDocsumFieldWriter>
MatchedElementsFilterDFW::create(const std::string& input_field_name, uint32_t input_field_enum,
search::attribute::IAttributeContext& attr_ctx,
- std::shared_ptr<StructFieldMapper> struct_field_mapper)
+ std::shared_ptr<MatchingElementsFields> matching_elems_fields)
{
StructFieldsResolver resolver(input_field_name, attr_ctx, false);
if (resolver.has_error()) {
return std::unique_ptr<IDocsumFieldWriter>();
}
- resolver.apply_to(*struct_field_mapper);
- return std::make_unique<MatchedElementsFilterDFW>(input_field_name, input_field_enum, std::move(struct_field_mapper));
+ resolver.apply_to(*matching_elems_fields);
+ return std::make_unique<MatchedElementsFilterDFW>(input_field_name, input_field_enum, std::move(matching_elems_fields));
}
MatchedElementsFilterDFW::~MatchedElementsFilterDFW() = default;
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/matched_elements_filter_dfw.h b/searchsummary/src/vespa/searchsummary/docsummary/matched_elements_filter_dfw.h
index 966b5b95fa7..087ddfd8d40 100644
--- a/searchsummary/src/vespa/searchsummary/docsummary/matched_elements_filter_dfw.h
+++ b/searchsummary/src/vespa/searchsummary/docsummary/matched_elements_filter_dfw.h
@@ -16,18 +16,18 @@ class MatchedElementsFilterDFW : public IDocsumFieldWriter {
private:
std::string _input_field_name;
uint32_t _input_field_enum;
- std::shared_ptr<StructFieldMapper> _struct_field_mapper;
+ std::shared_ptr<MatchingElementsFields> _matching_elems_fields;
const std::vector<uint32_t>& get_matching_elements(uint32_t docid, GetDocsumsState& state) const;
public:
MatchedElementsFilterDFW(const std::string& input_field_name, uint32_t input_field_enum,
- std::shared_ptr<StructFieldMapper> struct_field_mapper);
+ std::shared_ptr<MatchingElementsFields> matching_elems_fields);
static std::unique_ptr<IDocsumFieldWriter> create(const std::string& input_field_name, uint32_t input_field_enum,
- std::shared_ptr<StructFieldMapper> struct_field_mapper);
+ std::shared_ptr<MatchingElementsFields> matching_elems_fields);
static std::unique_ptr<IDocsumFieldWriter> create(const std::string& input_field_name, uint32_t input_field_enum,
search::attribute::IAttributeContext& attr_ctx,
- std::shared_ptr<StructFieldMapper> struct_field_mapper);
+ std::shared_ptr<MatchingElementsFields> matching_elems_fields);
~MatchedElementsFilterDFW();
bool IsGenerated() const override { return false; }
void insertField(uint32_t docid, GeneralResult* result, GetDocsumsState *state,
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/struct_fields_resolver.cpp b/searchsummary/src/vespa/searchsummary/docsummary/struct_fields_resolver.cpp
index 749fc2941a6..9caad947335 100644
--- a/searchsummary/src/vespa/searchsummary/docsummary/struct_fields_resolver.cpp
+++ b/searchsummary/src/vespa/searchsummary/docsummary/struct_fields_resolver.cpp
@@ -2,7 +2,7 @@
#include "struct_fields_resolver.h"
#include <vespa/searchcommon/attribute/iattributecontext.h>
-#include <vespa/searchlib/common/struct_field_mapper.h>
+#include <vespa/searchlib/common/matching_elements_fields.h>
#include <algorithm>
#include <vespa/log/log.h>
@@ -78,18 +78,18 @@ StructFieldsResolver::StructFieldsResolver(const vespalib::string& field_name, c
StructFieldsResolver::~StructFieldsResolver() = default;
void
-StructFieldsResolver::apply_to(StructFieldMapper& mapper) const
+StructFieldsResolver::apply_to(MatchingElementsFields& fields) const
{
if (is_map_of_struct()) {
if (_has_map_key) {
- mapper.add_mapping(_field_name, _map_key_attribute);
+ fields.add_mapping(_field_name, _map_key_attribute);
}
for (const auto& sub_field : _map_value_attributes) {
- mapper.add_mapping(_field_name, sub_field);
+ fields.add_mapping(_field_name, sub_field);
}
} else {
for (const auto& sub_field : _array_attributes) {
- mapper.add_mapping(_field_name, sub_field);
+ fields.add_mapping(_field_name, sub_field);
}
}
}
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/struct_fields_resolver.h b/searchsummary/src/vespa/searchsummary/docsummary/struct_fields_resolver.h
index b88e51a346b..e1db36d8a43 100644
--- a/searchsummary/src/vespa/searchsummary/docsummary/struct_fields_resolver.h
+++ b/searchsummary/src/vespa/searchsummary/docsummary/struct_fields_resolver.h
@@ -7,7 +7,7 @@
namespace search {
namespace attribute { class IAttributeContext; }
-class StructFieldMapper;
+class MatchingElementsFields;
}
namespace search::docsummary {
@@ -45,7 +45,7 @@ public:
const StringVector& get_array_fields() const { return _array_fields; }
const StringVector& get_array_attributes() const { return _array_attributes; }
bool has_error() const { return _error; }
- void apply_to(StructFieldMapper& mapper) const;
+ void apply_to(MatchingElementsFields& fields) const;
};
}
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/struct_map_attribute_combiner_dfw.cpp b/searchsummary/src/vespa/searchsummary/docsummary/struct_map_attribute_combiner_dfw.cpp
index 0a2c4726577..5344162b402 100644
--- a/searchsummary/src/vespa/searchsummary/docsummary/struct_map_attribute_combiner_dfw.cpp
+++ b/searchsummary/src/vespa/searchsummary/docsummary/struct_map_attribute_combiner_dfw.cpp
@@ -7,7 +7,7 @@
#include <vespa/searchcommon/attribute/iattributecontext.h>
#include <vespa/searchcommon/attribute/iattributevector.h>
#include <vespa/searchlib/common/matching_elements.h>
-#include <vespa/searchlib/common/struct_field_mapper.h>
+#include <vespa/searchlib/common/matching_elements_fields.h>
#include <vespa/vespalib/data/slime/cursor.h>
#include <cassert>
@@ -124,14 +124,14 @@ StructMapAttributeFieldWriterState::insertField(uint32_t docId, vespalib::slime:
StructMapAttributeCombinerDFW::StructMapAttributeCombinerDFW(const vespalib::string &fieldName,
const StructFieldsResolver& fields_resolver,
bool filter_elements,
- std::shared_ptr<StructFieldMapper> struct_field_mapper)
- : AttributeCombinerDFW(fieldName, filter_elements, std::move(struct_field_mapper)),
+ std::shared_ptr<MatchingElementsFields> matching_elems_fields)
+ : AttributeCombinerDFW(fieldName, filter_elements, std::move(matching_elems_fields)),
_keyAttributeName(fields_resolver.get_map_key_attribute()),
_valueFields(fields_resolver.get_map_value_fields()),
_valueAttributeNames(fields_resolver.get_map_value_attributes())
{
- if (filter_elements && _struct_field_mapper && !_struct_field_mapper->is_struct_field(fieldName)) {
- fields_resolver.apply_to(*_struct_field_mapper);
+ if (filter_elements && _matching_elems_fields && !_matching_elems_fields->has_field(fieldName)) {
+ fields_resolver.apply_to(*_matching_elems_fields);
}
}
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/struct_map_attribute_combiner_dfw.h b/searchsummary/src/vespa/searchsummary/docsummary/struct_map_attribute_combiner_dfw.h
index a28e487fb1c..c2fdbebc0b6 100644
--- a/searchsummary/src/vespa/searchsummary/docsummary/struct_map_attribute_combiner_dfw.h
+++ b/searchsummary/src/vespa/searchsummary/docsummary/struct_map_attribute_combiner_dfw.h
@@ -26,7 +26,7 @@ public:
StructMapAttributeCombinerDFW(const vespalib::string &fieldName,
const StructFieldsResolver& fields_resolver,
bool filter_elements,
- std::shared_ptr<StructFieldMapper> struct_field_mapper);
+ std::shared_ptr<MatchingElementsFields> matching_elems_fields);
~StructMapAttributeCombinerDFW() override;
};
diff --git a/streamingvisitors/src/tests/matching_elements_filler/matching_elements_filler_test.cpp b/streamingvisitors/src/tests/matching_elements_filler/matching_elements_filler_test.cpp
index 8135f378dd3..b40e045f8b0 100644
--- a/streamingvisitors/src/tests/matching_elements_filler/matching_elements_filler_test.cpp
+++ b/streamingvisitors/src/tests/matching_elements_filler/matching_elements_filler_test.cpp
@@ -1,27 +1,27 @@
// Copyright 2019 Oath Inc. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
#include <vespa/document/datatype/datatypes.h>
-#include <vespa/document/fieldvalue/document.h>
#include <vespa/document/fieldvalue/arrayfieldvalue.h>
+#include <vespa/document/fieldvalue/document.h>
#include <vespa/document/fieldvalue/intfieldvalue.h>
#include <vespa/document/fieldvalue/mapfieldvalue.h>
#include <vespa/document/fieldvalue/stringfieldvalue.h>
#include <vespa/document/fieldvalue/structfieldvalue.h>
-#include <vespa/searchlib/fef/matchdata.h>
-#include <vespa/searchlib/common/struct_field_mapper.h>
#include <vespa/searchlib/common/matching_elements.h>
+#include <vespa/searchlib/common/matching_elements_fields.h>
+#include <vespa/searchlib/fef/matchdata.h>
+#include <vespa/searchlib/query/streaming/query.h>
+#include <vespa/searchlib/query/streaming/queryterm.h>
#include <vespa/searchlib/query/tree/querybuilder.h>
#include <vespa/searchlib/query/tree/simplequery.h>
#include <vespa/searchlib/query/tree/stackdumpcreator.h>
-#include <vespa/searchlib/query/streaming/queryterm.h>
-#include <vespa/searchlib/query/streaming/query.h>
-#include <vespa/vsm/searcher/fieldsearcher.h>
-#include <vespa/vsm/searcher/utf8strchrfieldsearcher.h>
-#include <vespa/vsm/searcher/intfieldsearcher.h>
#include <vespa/searchvisitor/hitcollector.h>
#include <vespa/searchvisitor/matching_elements_filler.h>
#include <vespa/vdslib/container/searchresult.h>
#include <vespa/vespalib/gtest/gtest.h>
+#include <vespa/vsm/searcher/fieldsearcher.h>
+#include <vespa/vsm/searcher/intfieldsearcher.h>
+#include <vespa/vsm/searcher/utf8strchrfieldsearcher.h>
#include <iostream>
using document::ArrayDataType;
@@ -38,7 +38,7 @@ using document::StringFieldValue;
using document::StructDataType;
using document::StructFieldValue;
using search::MatchingElements;
-using search::StructFieldMapper;
+using search::MatchingElementsFields;
using search::fef::MatchData;
using search::query::StackDumpCreator;
using search::query::Weight;
@@ -256,24 +256,23 @@ vsm::DocumentTypeIndexFieldMapT make_index_to_field_ids() {
return ret;
}
-StructFieldMapper make_struct_field_mapper() {
- StructFieldMapper mapper;
- mapper.add_mapping("elem_array", "elem_array.name");
- mapper.add_mapping("elem_array", "elem_array.weight");
- mapper.add_mapping("elem_map", "elem_map.key");
- mapper.add_mapping("elem_map", "elem_map.value.name");
- mapper.add_mapping("elem_map", "elem_map.value.weight");
- mapper.add_mapping("str_int_map", "str_int_map.key");
- mapper.add_mapping("str_int_map", "str_int_map.value");
- return mapper;
-
+MatchingElementsFields make_matching_elements_fields() {
+ MatchingElementsFields fields;
+ fields.add_mapping("elem_array", "elem_array.name");
+ fields.add_mapping("elem_array", "elem_array.weight");
+ fields.add_mapping("elem_map", "elem_map.key");
+ fields.add_mapping("elem_map", "elem_map.value.name");
+ fields.add_mapping("elem_map", "elem_map.value.weight");
+ fields.add_mapping("str_int_map", "str_int_map.key");
+ fields.add_mapping("str_int_map", "str_int_map.value");
+ return fields;
}
}
class MatchingElementsFillerTest : public ::testing::Test {
const MyDocType _doc_type;
- StructFieldMapper _struct_field_mapper;
+ MatchingElementsFields _matching_elems_fields;
vsm::SharedFieldPathMap _field_path_map;
vsm::FieldIdTSearcherMap _field_searcher_map;
vsm::DocumentTypeIndexFieldMapT _index_to_field_ids;
@@ -296,7 +295,7 @@ public:
MatchingElementsFillerTest::MatchingElementsFillerTest()
: ::testing::Test(),
_doc_type(),
- _struct_field_mapper(make_struct_field_mapper()),
+ _matching_elems_fields(make_matching_elements_fields()),
_field_path_map(make_field_path_map(_doc_type)),
_field_searcher_map(make_field_searcher_map()),
_index_to_field_ids(make_index_to_field_ids()),
@@ -325,7 +324,7 @@ MatchingElementsFillerTest::fill_matching_elements(Query &&query)
_query = std::move(query);
_field_searcher_map.prepare(_index_to_field_ids, _shared_searcher_buf, _query);
_matching_elements_filler = std::make_unique<MatchingElementsFiller>(_field_searcher_map, _query, _hit_collector, _search_result);
- _matching_elements = _matching_elements_filler->fill_matching_elements(_struct_field_mapper);
+ _matching_elements = _matching_elements_filler->fill_matching_elements(_matching_elems_fields);
}
void
diff --git a/streamingvisitors/src/vespa/searchvisitor/matching_elements_filler.cpp b/streamingvisitors/src/vespa/searchvisitor/matching_elements_filler.cpp
index 994a7993666..fe717313ca4 100644
--- a/streamingvisitors/src/vespa/searchvisitor/matching_elements_filler.cpp
+++ b/streamingvisitors/src/vespa/searchvisitor/matching_elements_filler.cpp
@@ -2,14 +2,14 @@
#include "matching_elements_filler.h"
#include <vespa/searchlib/common/matching_elements.h>
-#include <vespa/searchlib/common/struct_field_mapper.h>
+#include <vespa/searchlib/common/matching_elements_fields.h>
#include <vespa/vsm/searcher/fieldsearcher.h>
#include <vespa/vdslib/container/searchresult.h>
#include "hitcollector.h"
#include <algorithm>
using search::MatchingElements;
-using search::StructFieldMapper;
+using search::MatchingElementsFields;
using search::streaming::AndNotQueryNode;
using search::streaming::HitList;
using search::streaming::Query;
@@ -27,15 +27,15 @@ namespace {
struct SubFieldTerm
{
- vespalib::string _struct_field_name;
+ vespalib::string _field_name;
const QueryTerm* _term;
public:
- SubFieldTerm(vespalib::string struct_field_name, const QueryTerm* term)
- : _struct_field_name(std::move(struct_field_name)),
+ SubFieldTerm(vespalib::string field_name, const QueryTerm* term)
+ : _field_name(std::move(field_name)),
_term(term)
{
}
- const vespalib::string& get_struct_field_name() const { return _struct_field_name; }
+ const vespalib::string& get_field_name() const { return _field_name; }
const QueryTerm& get_term() const { return *_term; }
};
@@ -47,12 +47,12 @@ class Matcher
HitList _hit_list;
std::vector<uint32_t> _elements;
- void select_query_nodes(const StructFieldMapper& mapper, const QueryNode& query_node);
- void add_matching_elements(const vespalib::string& struct_field_name, uint32_t doc_lid, const HitList& hit_list, MatchingElements& matching_elements);
+ void select_query_nodes(const MatchingElementsFields& fields, const QueryNode& query_node);
+ void add_matching_elements(const vespalib::string& field_name, uint32_t doc_lid, const HitList& hit_list, MatchingElements& matching_elements);
void find_matching_elements(const SameElementQueryNode& same_element, uint32_t doc_lid, MatchingElements& matching_elements);
void find_matching_elements(const SubFieldTerm& sub_field_term, uint32_t doc_lid, MatchingElements& matching_elements);
public:
- Matcher(vsm::FieldIdTSearcherMap& field_searcher_map, const StructFieldMapper& mapper, const Query& query);
+ Matcher(vsm::FieldIdTSearcherMap& field_searcher_map, const MatchingElementsFields& fields, const Query& query);
~Matcher();
bool empty() const { return _same_element_nodes.empty() && _sub_field_terms.empty(); }
void find_matching_elements(const vsm::StorageDocument& doc, uint32_t doc_lid, MatchingElements& matching_elements);
@@ -61,39 +61,39 @@ public:
template<typename T>
const T* as(const QueryNode& query_node) { return dynamic_cast<const T*>(&query_node); }
-Matcher::Matcher(FieldIdTSearcherMap& field_searcher_map, const StructFieldMapper& mapper, const Query& query)
+Matcher::Matcher(FieldIdTSearcherMap& field_searcher_map, const MatchingElementsFields& fields, const Query& query)
: _same_element_nodes(),
_sub_field_terms(),
_field_searcher_map(field_searcher_map),
_hit_list()
{
- select_query_nodes(mapper, query.getRoot());
+ select_query_nodes(fields, query.getRoot());
}
Matcher::~Matcher() = default;
void
-Matcher::select_query_nodes(const StructFieldMapper& mapper, const QueryNode& query_node)
+Matcher::select_query_nodes(const MatchingElementsFields& fields, const QueryNode& query_node)
{
if (auto same_element = as<SameElementQueryNode>(query_node)) {
- if (mapper.is_struct_field(same_element->getIndex())) {
+ if (fields.has_field(same_element->getIndex())) {
_same_element_nodes.emplace_back(same_element);
}
} else if (auto query_term = as<QueryTerm>(query_node)) {
- if (mapper.is_struct_subfield(query_term->getIndex())) {
- _sub_field_terms.emplace_back(mapper.get_struct_field(query_term->getIndex()), query_term);
+ if (fields.has_struct_field(query_term->getIndex())) {
+ _sub_field_terms.emplace_back(fields.get_enclosing_field(query_term->getIndex()), query_term);
}
} else if (auto and_not = as<AndNotQueryNode>(query_node)) {
- select_query_nodes(mapper, *(*and_not)[0]);
+ select_query_nodes(fields, *(*and_not)[0]);
} else if (auto intermediate = as<QueryConnector>(query_node)) {
for (size_t i = 0; i < intermediate->size(); ++i) {
- select_query_nodes(mapper, *(*intermediate)[i]);
+ select_query_nodes(fields, *(*intermediate)[i]);
}
}
}
void
-Matcher::add_matching_elements(const vespalib::string& struct_field_name, uint32_t doc_lid, const HitList& hit_list, MatchingElements& matching_elements)
+Matcher::add_matching_elements(const vespalib::string& field_name, uint32_t doc_lid, const HitList& hit_list, MatchingElements& matching_elements)
{
_elements.clear();
for (auto& hit : hit_list) {
@@ -104,7 +104,7 @@ Matcher::add_matching_elements(const vespalib::string& struct_field_name, uint32
auto last = std::unique(_elements.begin(), _elements.end());
_elements.erase(last, _elements.end());
}
- matching_elements.add_matching_elements(doc_lid, struct_field_name, _elements);
+ matching_elements.add_matching_elements(doc_lid, field_name, _elements);
}
void
@@ -121,7 +121,7 @@ Matcher::find_matching_elements(const SubFieldTerm& sub_field_term, uint32_t doc
{
const HitList& hit_list = sub_field_term.get_term().evaluateHits(_hit_list);
if (!hit_list.empty()) {
- add_matching_elements(sub_field_term.get_struct_field_name(), doc_lid, hit_list, matching_elements);
+ add_matching_elements(sub_field_term.get_field_name(), doc_lid, hit_list, matching_elements);
}
}
@@ -154,13 +154,13 @@ MatchingElementsFiller::MatchingElementsFiller(FieldIdTSearcherMap& field_search
MatchingElementsFiller::~MatchingElementsFiller() = default;
std::unique_ptr<MatchingElements>
-MatchingElementsFiller::fill_matching_elements(const StructFieldMapper& struct_field_mapper)
+MatchingElementsFiller::fill_matching_elements(const MatchingElementsFields& fields)
{
auto result = std::make_unique<MatchingElements>();
- if (struct_field_mapper.empty()) {
+ if (fields.empty()) {
return result;
}
- Matcher matcher(_field_searcher_map, struct_field_mapper, _query);
+ Matcher matcher(_field_searcher_map, fields, _query);
if (matcher.empty()) {
return result;
}
diff --git a/streamingvisitors/src/vespa/searchvisitor/matching_elements_filler.h b/streamingvisitors/src/vespa/searchvisitor/matching_elements_filler.h
index c93f89ac43d..244d3cea6bc 100644
--- a/streamingvisitors/src/vespa/searchvisitor/matching_elements_filler.h
+++ b/streamingvisitors/src/vespa/searchvisitor/matching_elements_filler.h
@@ -29,7 +29,7 @@ public:
MatchingElementsFiller(vsm::FieldIdTSearcherMap& field_searcher_map, search::streaming::Query& query,
HitCollector& hit_collector, vdslib::SearchResult& search_result);
virtual ~MatchingElementsFiller();
- std::unique_ptr<search::MatchingElements> fill_matching_elements(const search::StructFieldMapper& struct_field_mapper) override;
+ std::unique_ptr<search::MatchingElements> fill_matching_elements(const search::MatchingElementsFields& fields) override;
};
}
diff --git a/vsm/src/vespa/vsm/vsm/docsumconfig.cpp b/vsm/src/vespa/vsm/vsm/docsumconfig.cpp
index 7402a45fa4a..2512bea26df 100644
--- a/vsm/src/vespa/vsm/vsm/docsumconfig.cpp
+++ b/vsm/src/vespa/vsm/vsm/docsumconfig.cpp
@@ -3,11 +3,11 @@
#include <vespa/vsm/vsm/docsumconfig.h>
#include <vespa/searchsummary/docsummary/docsumfieldwriter.h>
#include <vespa/searchsummary/docsummary/matched_elements_filter_dfw.h>
-#include <vespa/searchlib/common/struct_field_mapper.h>
+#include <vespa/searchlib/common/matching_elements_fields.h>
#include <vespa/vsm/config/config-vsmfields.h>
#include <vespa/vsm/config/config-vsmsummary.h>
-using search::StructFieldMapper;
+using search::MatchingElementsFields;
using search::docsummary::IDocsumFieldWriter;
using search::docsummary::EmptyDFW;
using search::docsummary::MatchedElementsFilterDFW;
@@ -19,12 +19,12 @@ namespace vsm {
namespace {
-void populate_mapper(StructFieldMapper& mapper, VsmfieldsConfig& fields_config, const vespalib::string& field_name)
+void populate_fields(MatchingElementsFields& fields, VsmfieldsConfig& fields_config, const vespalib::string& field_name)
{
vespalib::string prefix = field_name + ".";
for (const auto& spec : fields_config.fieldspec) {
if (spec.name.substr(0, prefix.size()) == prefix) {
- mapper.add_mapping(field_name, spec.name);
+ fields.add_mapping(field_name, spec.name);
}
}
}
@@ -38,7 +38,7 @@ DynamicDocsumConfig::DynamicDocsumConfig(search::docsummary::IDocsumEnvironment*
}
IDocsumFieldWriter::UP
-DynamicDocsumConfig::createFieldWriter(const string & fieldName, const string & overrideName, const string & argument, bool & rc, std::shared_ptr<search::StructFieldMapper> struct_field_mapper)
+DynamicDocsumConfig::createFieldWriter(const string & fieldName, const string & overrideName, const string & argument, bool & rc, std::shared_ptr<search::MatchingElementsFields> matching_elems_fields)
{
IDocsumFieldWriter::UP fieldWriter;
if ((overrideName == "staticrank") ||
@@ -60,11 +60,11 @@ DynamicDocsumConfig::createFieldWriter(const string & fieldName, const string &
string source_field = argument.empty() ? fieldName : argument;
const ResultConfig& resultConfig = getResultConfig();
int source_field_enum = resultConfig.GetFieldNameEnum().Lookup(source_field.c_str());
- populate_mapper(*struct_field_mapper, *_vsm_fields_config, source_field);
- fieldWriter = MatchedElementsFilterDFW::create(source_field, source_field_enum, struct_field_mapper);
+ populate_fields(*matching_elems_fields, *_vsm_fields_config, source_field);
+ fieldWriter = MatchedElementsFilterDFW::create(source_field, source_field_enum, matching_elems_fields);
rc = static_cast<bool>(fieldWriter);
} else {
- fieldWriter = search::docsummary::DynamicDocsumConfig::createFieldWriter(fieldName, overrideName, argument, rc, struct_field_mapper);
+ fieldWriter = search::docsummary::DynamicDocsumConfig::createFieldWriter(fieldName, overrideName, argument, rc, matching_elems_fields);
}
return fieldWriter;
}
diff --git a/vsm/src/vespa/vsm/vsm/docsumconfig.h b/vsm/src/vespa/vsm/vsm/docsumconfig.h
index 17128798ef2..8be9324b9d6 100644
--- a/vsm/src/vespa/vsm/vsm/docsumconfig.h
+++ b/vsm/src/vespa/vsm/vsm/docsumconfig.h
@@ -22,7 +22,7 @@ public:
private:
std::unique_ptr<search::docsummary::IDocsumFieldWriter>
createFieldWriter(const string & fieldName, const string & overrideName,
- const string & cf, bool & rc, std::shared_ptr<search::StructFieldMapper> struct_field_mapper) override;
+ const string & cf, bool & rc, std::shared_ptr<search::MatchingElementsFields> matching_elems_fields) override;
};
}
diff --git a/vsm/src/vespa/vsm/vsm/i_matching_elements_filler.h b/vsm/src/vespa/vsm/vsm/i_matching_elements_filler.h
index a30dcbf2a5b..45233818452 100644
--- a/vsm/src/vespa/vsm/vsm/i_matching_elements_filler.h
+++ b/vsm/src/vespa/vsm/vsm/i_matching_elements_filler.h
@@ -6,7 +6,7 @@
namespace search {
class MatchingElements;
-class StructFieldMapper;
+class MatchingElementsFields;
}
namespace vsm {
@@ -17,7 +17,7 @@ namespace vsm {
*/
class IMatchingElementsFiller {
public:
- virtual std::unique_ptr<search::MatchingElements> fill_matching_elements(const search::StructFieldMapper& struct_field_mapper) = 0;
+ virtual std::unique_ptr<search::MatchingElements> fill_matching_elements(const search::MatchingElementsFields& fields) = 0;
virtual ~IMatchingElementsFiller() = default;
};
diff --git a/vsm/src/vespa/vsm/vsm/vsm-adapter.cpp b/vsm/src/vespa/vsm/vsm/vsm-adapter.cpp
index dd7b36015e4..5d8c7735c0e 100644
--- a/vsm/src/vespa/vsm/vsm/vsm-adapter.cpp
+++ b/vsm/src/vespa/vsm/vsm/vsm-adapter.cpp
@@ -50,10 +50,10 @@ void GetDocsumsStateCallback::FillDocumentLocations(GetDocsumsState *state, IDoc
}
std::unique_ptr<MatchingElements>
-GetDocsumsStateCallback::fill_matching_elements(const search::StructFieldMapper& struct_field_mapper)
+GetDocsumsStateCallback::fill_matching_elements(const search::MatchingElementsFields& fields)
{
if (_matching_elements_filler) {
- return _matching_elements_filler->fill_matching_elements(struct_field_mapper);
+ return _matching_elements_filler->fill_matching_elements(fields);
}
return std::make_unique<MatchingElements>();
}
diff --git a/vsm/src/vespa/vsm/vsm/vsm-adapter.h b/vsm/src/vespa/vsm/vsm/vsm-adapter.h
index 96d12e23db6..cffae318586 100644
--- a/vsm/src/vespa/vsm/vsm/vsm-adapter.h
+++ b/vsm/src/vespa/vsm/vsm/vsm-adapter.h
@@ -42,7 +42,7 @@ public:
void FillRankFeatures(GetDocsumsState * state, IDocsumEnvironment * env) override;
void ParseLocation(GetDocsumsState * state) override;
virtual void FillDocumentLocations(GetDocsumsState * state, IDocsumEnvironment * env);
- virtual std::unique_ptr<search::MatchingElements> fill_matching_elements(const search::StructFieldMapper& struct_field_mapper) override;
+ virtual std::unique_ptr<search::MatchingElements> fill_matching_elements(const search::MatchingElementsFields& fields) override;
void setSummaryFeatures(const search::FeatureSet::SP & sf) { _summaryFeatures = sf; }
void setRankFeatures(const search::FeatureSet::SP & rf) { _rankFeatures = rf; }
void set_matching_elements_filler(std::unique_ptr<IMatchingElementsFiller> matching_elements_filler);