summaryrefslogtreecommitdiffstats
path: root/searchsummary/src/vespa/searchsummary/docsummary/query_term_filter_factory.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'searchsummary/src/vespa/searchsummary/docsummary/query_term_filter_factory.cpp')
-rw-r--r--searchsummary/src/vespa/searchsummary/docsummary/query_term_filter_factory.cpp41
1 files changed, 41 insertions, 0 deletions
diff --git a/searchsummary/src/vespa/searchsummary/docsummary/query_term_filter_factory.cpp b/searchsummary/src/vespa/searchsummary/docsummary/query_term_filter_factory.cpp
new file mode 100644
index 00000000000..69a67d2461c
--- /dev/null
+++ b/searchsummary/src/vespa/searchsummary/docsummary/query_term_filter_factory.cpp
@@ -0,0 +1,41 @@
+// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+
+#include "query_term_filter_factory.h"
+#include "query_term_filter.h"
+#include <vespa/searchcommon/common/schema.h>
+#include <vespa/vespalib/stllike/hash_map.hpp>
+#include <vespa/vespalib/stllike/hash_set.hpp>
+
+namespace search::docsummary {
+
+QueryTermFilterFactory::QueryTermFilterFactory(const search::index::Schema& schema)
+ : IQueryTermFilterFactory(),
+ _view_map()
+{
+ for (uint32_t i = 0; i < schema.getNumFieldSets(); ++i) {
+ auto& field_set = schema.getFieldSet(i);
+ auto& fields = field_set.getFields();
+ for (auto& field : fields) {
+ auto& vec = _view_map[field];
+ vec.emplace_back(field_set.getName());
+ }
+ }
+}
+
+QueryTermFilterFactory::~QueryTermFilterFactory() = default;
+
+std::shared_ptr<const IQueryTermFilter>
+QueryTermFilterFactory::make(vespalib::stringref input_field) const
+{
+ vespalib::hash_set<vespalib::string> views;
+ views.insert(input_field);
+ auto itr = _view_map.find(input_field);
+ if (itr != _view_map.end()) {
+ for (auto& index : itr->second) {
+ views.insert(index);
+ }
+ }
+ return std::make_shared<QueryTermFilter>(std::move(views));
+}
+
+}