aboutsummaryrefslogtreecommitdiffstats
path: root/streamingvisitors
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@online.no>2023-01-25 14:57:37 +0100
committerTor Egge <Tor.Egge@online.no>2023-01-25 14:57:37 +0100
commite6cc6fd3504640dc2a8768a6e6bcb9791379094e (patch)
tree60c7490d2e5648acc450f0fb9459983d968d996d /streamingvisitors
parent904dd2bd8e3a19d4552719ca52baa427d511fcde (diff)
Rename KeywordExtractor to QueryTermFilter.
Diffstat (limited to 'streamingvisitors')
-rw-r--r--streamingvisitors/CMakeLists.txt2
-rw-r--r--streamingvisitors/src/tests/keyword_extractor_factory/CMakeLists.txt9
-rw-r--r--streamingvisitors/src/tests/keyword_extractor_factory/keyword_extractor_factory_test.cpp123
-rw-r--r--streamingvisitors/src/tests/query_term_filter_factory/CMakeLists.txt9
-rw-r--r--streamingvisitors/src/tests/query_term_filter_factory/query_term_filter_factory_test.cpp123
-rw-r--r--streamingvisitors/src/vespa/vsm/vsm/CMakeLists.txt2
-rw-r--r--streamingvisitors/src/vespa/vsm/vsm/docsum_field_writer_factory.cpp6
-rw-r--r--streamingvisitors/src/vespa/vsm/vsm/docsum_field_writer_factory.h2
-rw-r--r--streamingvisitors/src/vespa/vsm/vsm/keyword_extractor_factory.cpp80
-rw-r--r--streamingvisitors/src/vespa/vsm/vsm/query_term_filter_factory.cpp80
-rw-r--r--streamingvisitors/src/vespa/vsm/vsm/query_term_filter_factory.h (renamed from streamingvisitors/src/vespa/vsm/vsm/keyword_extractor_factory.h)18
-rw-r--r--streamingvisitors/src/vespa/vsm/vsm/vsm-adapter.cpp22
12 files changed, 238 insertions, 238 deletions
diff --git a/streamingvisitors/CMakeLists.txt b/streamingvisitors/CMakeLists.txt
index adfee1a76ae..2c7f01ddf37 100644
--- a/streamingvisitors/CMakeLists.txt
+++ b/streamingvisitors/CMakeLists.txt
@@ -26,7 +26,7 @@ vespa_define_module(
src/tests/charbuffer
src/tests/docsum
src/tests/document
- src/tests/keyword_extractor_factory
+ src/tests/query_term_filter_factory
src/tests/searcher
src/tests/textutil
)
diff --git a/streamingvisitors/src/tests/keyword_extractor_factory/CMakeLists.txt b/streamingvisitors/src/tests/keyword_extractor_factory/CMakeLists.txt
deleted file mode 100644
index 54e2368f200..00000000000
--- a/streamingvisitors/src/tests/keyword_extractor_factory/CMakeLists.txt
+++ /dev/null
@@ -1,9 +0,0 @@
-# Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-vespa_add_executable(streamingvisitors_keyword_extractor_factory_test_app TEST
- SOURCES
- keyword_extractor_factory_test.cpp
- DEPENDS
- streamingvisitors
- GTest::GTest
-)
-vespa_add_test(NAME streamingvisitors_keyword_extractor_factory_test_app COMMAND streamingvisitors_keyword_extractor_factory_test_app)
diff --git a/streamingvisitors/src/tests/keyword_extractor_factory/keyword_extractor_factory_test.cpp b/streamingvisitors/src/tests/keyword_extractor_factory/keyword_extractor_factory_test.cpp
deleted file mode 100644
index e06217a35f0..00000000000
--- a/streamingvisitors/src/tests/keyword_extractor_factory/keyword_extractor_factory_test.cpp
+++ /dev/null
@@ -1,123 +0,0 @@
-// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-
-#include <vespa/searchsummary/docsummary/i_keyword_extractor.h>
-#include <vespa/vsm/vsm/keyword_extractor_factory.h>
-#include <vespa/vespalib/gtest/gtest.h>
-
-using search::docsummary::IKeywordExtractor;
-using search::docsummary::IKeywordExtractorFactory;
-using vespa::config::search::vsm::VsmfieldsConfig;
-using vespa::config::search::vsm::VsmfieldsConfigBuilder;
-using vespa::config::search::vsm::VsmsummaryConfig;
-using vespa::config::search::vsm::VsmsummaryConfigBuilder;
-using vsm::KeywordExtractorFactory;
-
-class KeywordExtractorFactoryTest : public testing::Test {
- std::unique_ptr<IKeywordExtractorFactory> _factory;
- VsmfieldsConfigBuilder _fields;
- VsmsummaryConfigBuilder _summary;
-protected:
- KeywordExtractorFactoryTest();
- ~KeywordExtractorFactoryTest() override;
-
- void make_factory() {
- _factory = std::make_unique<KeywordExtractorFactory>(_fields, _summary);
- }
-
- bool check_index(const vespalib::string &index_name, const vespalib::string& summary_field) {
- if (!_factory) {
- make_factory();
- }
- auto extractor = _factory->make(summary_field);
- return extractor->isLegalIndex(index_name);
- }
-
- void add_summary_field(const vespalib::string& summary_field_name, const std::vector<vespalib::string>& field_names)
- {
- VsmsummaryConfigBuilder::Fieldmap field_map;
- field_map.summary = summary_field_name;
- for (auto& field_name : field_names) {
- VsmsummaryConfigBuilder::Fieldmap::Document document;
- document.field = field_name;
- field_map.document.emplace_back(document);
- }
- _summary.fieldmap.emplace_back(field_map);
- _factory.reset();
- }
- void add_index(const vespalib::string& index_name, const std::vector<vespalib::string>& field_names)
- {
- if (_fields.documenttype.empty()) {
- _fields.documenttype.resize(1);
- _fields.documenttype.back().name = "dummy";
- }
- VsmfieldsConfigBuilder::Documenttype::Index index;
- index.name = index_name;
- for (auto& field_name : field_names) {
- VsmfieldsConfigBuilder::Documenttype::Index::Field field;
- field.name = field_name;
- index.field.emplace_back(field);
- }
- _fields.documenttype.back().index.emplace_back(index);
- _factory.reset();
- }
-};
-
-
-KeywordExtractorFactoryTest::KeywordExtractorFactoryTest()
- : testing::Test(),
- _factory()
-{
-}
-
-KeywordExtractorFactoryTest::~KeywordExtractorFactoryTest() = default;
-
-TEST_F(KeywordExtractorFactoryTest, empty_config)
-{
- EXPECT_FALSE(check_index("foo", "foo"));
-}
-
-TEST_F(KeywordExtractorFactoryTest, implied_identity_mapping_for_summary_field)
-{
- add_index("foo", {"bar"});
- EXPECT_FALSE(check_index("foo", "foo"));
- EXPECT_TRUE(check_index("foo", "bar"));
-}
-
-TEST_F(KeywordExtractorFactoryTest, two_source_fields_for_summary_field)
-{
- add_index("bar", {"bar"});
- add_index("baz", {"baz"});
- add_summary_field("foo", {"bar", "baz"});
- EXPECT_FALSE(check_index("foo", "foo"));
- EXPECT_TRUE(check_index("bar", "foo"));
- EXPECT_TRUE(check_index("bar", "bar"));
- EXPECT_TRUE(check_index("baz", "foo"));
- EXPECT_TRUE(check_index("baz", "baz"));
-}
-
-TEST_F(KeywordExtractorFactoryTest, two_source_fields_for_summary_field_and_multiple_indexes)
-{
- add_index("bar", {"bar"});
- add_index("baz", {"baz"});
- add_index("both", {"bar", "baz"});
- add_index("default", {"baz"});
- add_summary_field("foo", {"bar", "baz"});
- EXPECT_FALSE(check_index("foo", "foo"));
- EXPECT_TRUE(check_index("both", "foo"));
- EXPECT_TRUE(check_index("bar", "foo"));
- EXPECT_TRUE(check_index("baz", "foo"));
- EXPECT_TRUE(check_index("default", "foo"));
- EXPECT_TRUE(check_index("", "foo"));
- EXPECT_TRUE(check_index("both", "bar"));
- EXPECT_TRUE(check_index("bar", "bar"));
- EXPECT_FALSE(check_index("baz", "bar"));
- EXPECT_FALSE(check_index("default", "bar"));
- EXPECT_FALSE(check_index("", "bar"));
- EXPECT_TRUE(check_index("both", "baz"));
- EXPECT_FALSE(check_index("bar", "baz"));
- EXPECT_TRUE(check_index("baz", "baz"));
- EXPECT_TRUE(check_index("default", "baz"));
- EXPECT_TRUE(check_index("", "baz"));
-}
-
-GTEST_MAIN_RUN_ALL_TESTS()
diff --git a/streamingvisitors/src/tests/query_term_filter_factory/CMakeLists.txt b/streamingvisitors/src/tests/query_term_filter_factory/CMakeLists.txt
new file mode 100644
index 00000000000..219602a8c03
--- /dev/null
+++ b/streamingvisitors/src/tests/query_term_filter_factory/CMakeLists.txt
@@ -0,0 +1,9 @@
+# Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+vespa_add_executable(streamingvisitors_query_term_filter_factory_test_app TEST
+ SOURCES
+ query_term_filter_factory_test.cpp
+ DEPENDS
+ streamingvisitors
+ GTest::GTest
+)
+vespa_add_test(NAME streamingvisitors_query_term_filter_factory_test_app COMMAND streamingvisitors_query_term_filter_factory_test_app)
diff --git a/streamingvisitors/src/tests/query_term_filter_factory/query_term_filter_factory_test.cpp b/streamingvisitors/src/tests/query_term_filter_factory/query_term_filter_factory_test.cpp
new file mode 100644
index 00000000000..54eaa8b0ee1
--- /dev/null
+++ b/streamingvisitors/src/tests/query_term_filter_factory/query_term_filter_factory_test.cpp
@@ -0,0 +1,123 @@
+// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+
+#include <vespa/searchsummary/docsummary/i_query_term_filter.h>
+#include <vespa/vsm/vsm/query_term_filter_factory.h>
+#include <vespa/vespalib/gtest/gtest.h>
+
+using search::docsummary::IQueryTermFilter;
+using search::docsummary::IQueryTermFilterFactory;
+using vespa::config::search::vsm::VsmfieldsConfig;
+using vespa::config::search::vsm::VsmfieldsConfigBuilder;
+using vespa::config::search::vsm::VsmsummaryConfig;
+using vespa::config::search::vsm::VsmsummaryConfigBuilder;
+using vsm::QueryTermFilterFactory;
+
+class QueryTermFilterFactoryTest : public testing::Test {
+ std::unique_ptr<IQueryTermFilterFactory> _factory;
+ VsmfieldsConfigBuilder _fields;
+ VsmsummaryConfigBuilder _summary;
+protected:
+ QueryTermFilterFactoryTest();
+ ~QueryTermFilterFactoryTest() override;
+
+ void make_factory() {
+ _factory = std::make_unique<QueryTermFilterFactory>(_fields, _summary);
+ }
+
+ bool check_view(const vespalib::string& view, const vespalib::string& summary_field) {
+ if (!_factory) {
+ make_factory();
+ }
+ auto query_term_filter = _factory->make(summary_field);
+ return query_term_filter->use_view(view);
+ }
+
+ void add_summary_field(const vespalib::string& summary_field_name, const std::vector<vespalib::string>& field_names)
+ {
+ VsmsummaryConfigBuilder::Fieldmap field_map;
+ field_map.summary = summary_field_name;
+ for (auto& field_name : field_names) {
+ VsmsummaryConfigBuilder::Fieldmap::Document document;
+ document.field = field_name;
+ field_map.document.emplace_back(document);
+ }
+ _summary.fieldmap.emplace_back(field_map);
+ _factory.reset();
+ }
+ void add_index(const vespalib::string& index_name, const std::vector<vespalib::string>& field_names)
+ {
+ if (_fields.documenttype.empty()) {
+ _fields.documenttype.resize(1);
+ _fields.documenttype.back().name = "dummy";
+ }
+ VsmfieldsConfigBuilder::Documenttype::Index index;
+ index.name = index_name;
+ for (auto& field_name : field_names) {
+ VsmfieldsConfigBuilder::Documenttype::Index::Field field;
+ field.name = field_name;
+ index.field.emplace_back(field);
+ }
+ _fields.documenttype.back().index.emplace_back(index);
+ _factory.reset();
+ }
+};
+
+
+QueryTermFilterFactoryTest::QueryTermFilterFactoryTest()
+ : testing::Test(),
+ _factory()
+{
+}
+
+QueryTermFilterFactoryTest::~QueryTermFilterFactoryTest() = default;
+
+TEST_F(QueryTermFilterFactoryTest, empty_config)
+{
+ EXPECT_FALSE(check_view("foo", "foo"));
+}
+
+TEST_F(QueryTermFilterFactoryTest, implied_identity_mapping_for_summary_field)
+{
+ add_index("foo", {"bar"});
+ EXPECT_FALSE(check_view("foo", "foo"));
+ EXPECT_TRUE(check_view("foo", "bar"));
+}
+
+TEST_F(QueryTermFilterFactoryTest, two_source_fields_for_summary_field)
+{
+ add_index("bar", {"bar"});
+ add_index("baz", {"baz"});
+ add_summary_field("foo", {"bar", "baz"});
+ EXPECT_FALSE(check_view("foo", "foo"));
+ EXPECT_TRUE(check_view("bar", "foo"));
+ EXPECT_TRUE(check_view("bar", "bar"));
+ EXPECT_TRUE(check_view("baz", "foo"));
+ EXPECT_TRUE(check_view("baz", "baz"));
+}
+
+TEST_F(QueryTermFilterFactoryTest, two_source_fields_for_summary_field_and_multiple_indexes)
+{
+ add_index("bar", {"bar"});
+ add_index("baz", {"baz"});
+ add_index("both", {"bar", "baz"});
+ add_index("default", {"baz"});
+ add_summary_field("foo", {"bar", "baz"});
+ EXPECT_FALSE(check_view("foo", "foo"));
+ EXPECT_TRUE(check_view("both", "foo"));
+ EXPECT_TRUE(check_view("bar", "foo"));
+ EXPECT_TRUE(check_view("baz", "foo"));
+ EXPECT_TRUE(check_view("default", "foo"));
+ EXPECT_TRUE(check_view("", "foo"));
+ EXPECT_TRUE(check_view("both", "bar"));
+ EXPECT_TRUE(check_view("bar", "bar"));
+ EXPECT_FALSE(check_view("baz", "bar"));
+ EXPECT_FALSE(check_view("default", "bar"));
+ EXPECT_FALSE(check_view("", "bar"));
+ EXPECT_TRUE(check_view("both", "baz"));
+ EXPECT_FALSE(check_view("bar", "baz"));
+ EXPECT_TRUE(check_view("baz", "baz"));
+ EXPECT_TRUE(check_view("default", "baz"));
+ EXPECT_TRUE(check_view("", "baz"));
+}
+
+GTEST_MAIN_RUN_ALL_TESTS()
diff --git a/streamingvisitors/src/vespa/vsm/vsm/CMakeLists.txt b/streamingvisitors/src/vespa/vsm/vsm/CMakeLists.txt
index 67acbc1a391..741d2d7a731 100644
--- a/streamingvisitors/src/vespa/vsm/vsm/CMakeLists.txt
+++ b/streamingvisitors/src/vespa/vsm/vsm/CMakeLists.txt
@@ -6,7 +6,7 @@ vespa_add_library(vsm_vsmbase OBJECT
docsum_field_writer_factory.cpp
fieldsearchspec.cpp
flattendocsumwriter.cpp
- keyword_extractor_factory.cpp
+ query_term_filter_factory.cpp
snippetmodifier.cpp
vsm-adapter.cpp
DEPENDS
diff --git a/streamingvisitors/src/vespa/vsm/vsm/docsum_field_writer_factory.cpp b/streamingvisitors/src/vespa/vsm/vsm/docsum_field_writer_factory.cpp
index f3c383a4ba5..36873b713aa 100644
--- a/streamingvisitors/src/vespa/vsm/vsm/docsum_field_writer_factory.cpp
+++ b/streamingvisitors/src/vespa/vsm/vsm/docsum_field_writer_factory.cpp
@@ -14,7 +14,7 @@ using search::docsummary::CopyDFW;
using search::docsummary::DocsumFieldWriter;
using search::docsummary::EmptyDFW;
using search::docsummary::IDocsumEnvironment;
-using search::docsummary::IKeywordExtractorFactory;
+using search::docsummary::IQueryTermFilterFactory;
using search::docsummary::MatchedElementsFilterDFW;
using vespa::config::search::vsm::VsmfieldsConfig;
@@ -37,8 +37,8 @@ void populate_fields(MatchingElementsFields& fields, VsmfieldsConfig& fields_con
}
-DocsumFieldWriterFactory::DocsumFieldWriterFactory(bool use_v8_geo_positions, const IDocsumEnvironment& env, const IKeywordExtractorFactory& keyword_extractor_factory, const vespa::config::search::vsm::VsmfieldsConfig& vsm_fields_config)
- : search::docsummary::DocsumFieldWriterFactory(use_v8_geo_positions, env, keyword_extractor_factory),
+DocsumFieldWriterFactory::DocsumFieldWriterFactory(bool use_v8_geo_positions, const IDocsumEnvironment& env, const IQueryTermFilterFactory& query_term_filter_factory, const vespa::config::search::vsm::VsmfieldsConfig& vsm_fields_config)
+ : search::docsummary::DocsumFieldWriterFactory(use_v8_geo_positions, env, query_term_filter_factory),
_vsm_fields_config(vsm_fields_config)
{
}
diff --git a/streamingvisitors/src/vespa/vsm/vsm/docsum_field_writer_factory.h b/streamingvisitors/src/vespa/vsm/vsm/docsum_field_writer_factory.h
index 81acd0c7668..078c466d3d2 100644
--- a/streamingvisitors/src/vespa/vsm/vsm/docsum_field_writer_factory.h
+++ b/streamingvisitors/src/vespa/vsm/vsm/docsum_field_writer_factory.h
@@ -16,7 +16,7 @@ class DocsumFieldWriterFactory : public search::docsummary::DocsumFieldWriterFac
const vespa::config::search::vsm::VsmfieldsConfig& _vsm_fields_config;
public:
- DocsumFieldWriterFactory(bool use_v8_geo_positions, const search::docsummary::IDocsumEnvironment& env, const search::docsummary::IKeywordExtractorFactory& keyword_extractor_factory, const vespa::config::search::vsm::VsmfieldsConfig& vsm_fields_config);
+ DocsumFieldWriterFactory(bool use_v8_geo_positions, const search::docsummary::IDocsumEnvironment& env, const search::docsummary::IQueryTermFilterFactory& query_term_filter_factory, const vespa::config::search::vsm::VsmfieldsConfig& vsm_fields_config);
~DocsumFieldWriterFactory() override;
std::unique_ptr<search::docsummary::DocsumFieldWriter>
create_docsum_field_writer(const vespalib::string& field_name,
diff --git a/streamingvisitors/src/vespa/vsm/vsm/keyword_extractor_factory.cpp b/streamingvisitors/src/vespa/vsm/vsm/keyword_extractor_factory.cpp
deleted file mode 100644
index 5319f554c81..00000000000
--- a/streamingvisitors/src/vespa/vsm/vsm/keyword_extractor_factory.cpp
+++ /dev/null
@@ -1,80 +0,0 @@
-// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
-
-#include "keyword_extractor_factory.h"
-#include <vespa/searchsummary/docsummary/keyword_extractor.h>
-#include <vespa/vespalib/stllike/hash_map.hpp>
-#include <vespa/vespalib/stllike/hash_set.hpp>
-#include <cassert>
-#include <vespa/log/log.h>
-LOG_SETUP(".vsm.keyword_extractor_factory");
-
-using search::docsummary::IKeywordExtractor;
-using search::docsummary::IKeywordExtractorFactory;
-using search::docsummary::KeywordExtractor;
-using vespa::config::search::vsm::VsmfieldsConfig;
-using vespa::config::search::vsm::VsmsummaryConfig;
-
-namespace vsm {
-
-KeywordExtractorFactory::KeywordExtractorFactory(VsmfieldsConfig& vsm_fields_config,
- VsmsummaryConfig& vsm_summary_config)
- : IKeywordExtractorFactory(),
- _index_map(),
- _field_map()
-{
- populate_index_map(vsm_fields_config);
- populate_field_map(vsm_summary_config);
-}
-
-KeywordExtractorFactory::~KeywordExtractorFactory() = default;
-
-void
-KeywordExtractorFactory::populate_index_map(VsmfieldsConfig& vsm_fields_config)
-{
- for (auto& doctype : vsm_fields_config.documenttype) {
- for (auto& index : doctype.index) {
- for (auto& field : index.field) {
- _index_map[field.name].insert(index.name);
- }
- }
- }
-}
-
-void
-KeywordExtractorFactory::populate_field_map(VsmsummaryConfig& vsm_summary_config)
-{
- for (auto& summary_field : vsm_summary_config.fieldmap) {
- for (auto& document : summary_field.document) {
- _field_map[summary_field.summary].insert(document.field);
- }
- }
-}
-
-void
-KeywordExtractorFactory::populate_indexes(StringSet& indexes, const vespalib::string& field) const
-{
- auto itr = _index_map.find(field);
- if (itr != _index_map.end()) {
- for (auto& index : itr->second) {
- indexes.insert(index);
- }
- }
-}
-
-std::shared_ptr<const IKeywordExtractor>
-KeywordExtractorFactory::make(vespalib::stringref input_field) const
-{
- StringSet indexes;
- auto itr = _field_map.find(input_field);
- if (itr != _field_map.end()) {
- for (auto& field : itr->second) {
- populate_indexes(indexes, field);
- }
- } else {
- // Assume identity mapping vsm summary field -> document field
- populate_indexes(indexes, input_field);
- }
- return std::make_shared<KeywordExtractor>(std::move(indexes));
-}
-
-}
diff --git a/streamingvisitors/src/vespa/vsm/vsm/query_term_filter_factory.cpp b/streamingvisitors/src/vespa/vsm/vsm/query_term_filter_factory.cpp
new file mode 100644
index 00000000000..262a557334e
--- /dev/null
+++ b/streamingvisitors/src/vespa/vsm/vsm/query_term_filter_factory.cpp
@@ -0,0 +1,80 @@
+// 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 <vespa/searchsummary/docsummary/query_term_filter.h>
+#include <vespa/vespalib/stllike/hash_map.hpp>
+#include <vespa/vespalib/stllike/hash_set.hpp>
+#include <cassert>
+#include <vespa/log/log.h>
+LOG_SETUP(".vsm.query_term_filter_factory");
+
+using search::docsummary::IQueryTermFilter;
+using search::docsummary::IQueryTermFilterFactory;
+using search::docsummary::QueryTermFilter;
+using vespa::config::search::vsm::VsmfieldsConfig;
+using vespa::config::search::vsm::VsmsummaryConfig;
+
+namespace vsm {
+
+QueryTermFilterFactory::QueryTermFilterFactory(VsmfieldsConfig& vsm_fields_config,
+ VsmsummaryConfig& vsm_summary_config)
+ : IQueryTermFilterFactory(),
+ _view_map(),
+ _field_map()
+{
+ populate_view_map(vsm_fields_config);
+ populate_field_map(vsm_summary_config);
+}
+
+QueryTermFilterFactory::~QueryTermFilterFactory() = default;
+
+void
+QueryTermFilterFactory::populate_view_map(VsmfieldsConfig& vsm_fields_config)
+{
+ for (auto& doctype : vsm_fields_config.documenttype) {
+ for (auto& index : doctype.index) {
+ for (auto& field : index.field) {
+ _view_map[field.name].insert(index.name);
+ }
+ }
+ }
+}
+
+void
+QueryTermFilterFactory::populate_field_map(VsmsummaryConfig& vsm_summary_config)
+{
+ for (auto& summary_field : vsm_summary_config.fieldmap) {
+ for (auto& document : summary_field.document) {
+ _field_map[summary_field.summary].insert(document.field);
+ }
+ }
+}
+
+void
+QueryTermFilterFactory::populate_views(StringSet& views, const vespalib::string& field) const
+{
+ auto itr = _view_map.find(field);
+ if (itr != _view_map.end()) {
+ for (auto& index : itr->second) {
+ views.insert(index);
+ }
+ }
+}
+
+std::shared_ptr<const IQueryTermFilter>
+QueryTermFilterFactory::make(vespalib::stringref input_field) const
+{
+ StringSet views;
+ auto itr = _field_map.find(input_field);
+ if (itr != _field_map.end()) {
+ for (auto& field : itr->second) {
+ populate_views(views, field);
+ }
+ } else {
+ // Assume identity mapping vsm summary field -> document field
+ populate_views(views, input_field);
+ }
+ return std::make_shared<QueryTermFilter>(std::move(views));
+}
+
+}
diff --git a/streamingvisitors/src/vespa/vsm/vsm/keyword_extractor_factory.h b/streamingvisitors/src/vespa/vsm/vsm/query_term_filter_factory.h
index 6ffcbd6f84b..a0f518b90b0 100644
--- a/streamingvisitors/src/vespa/vsm/vsm/keyword_extractor_factory.h
+++ b/streamingvisitors/src/vespa/vsm/vsm/query_term_filter_factory.h
@@ -2,7 +2,7 @@
#pragma once
-#include <vespa/searchsummary/docsummary/i_keyword_extractor_factory.h>
+#include <vespa/searchsummary/docsummary/i_query_term_filter_factory.h>
#include <vespa/vespalib/stllike/hash_map.h>
#include <vespa/vespalib/stllike/hash_set.h>
#include <vespa/vsm/config/config-vsmfields.h>
@@ -11,12 +11,12 @@
namespace vsm {
/*
- * Class for creating an instance of IKeywordExtractor for streaming search.
+ * Class for creating an instance of IQueryTermFilter for streaming search.
*
* vsm summary fields are treated as document fields by the summary framework
* in the searchsummary module, cf. IDocsumStoreDocument.
*/
-class KeywordExtractorFactory : public search::docsummary::IKeywordExtractorFactory
+class QueryTermFilterFactory : public search::docsummary::IQueryTermFilterFactory
{
public:
using VsmfieldsConfig = vespa::config::search::vsm::VsmfieldsConfig;
@@ -24,16 +24,16 @@ public:
private:
using StringSet = vespalib::hash_set<vespalib::string>;
using StringSetMap = vespalib::hash_map<vespalib::string, StringSet>;
- StringSetMap _index_map; // document field -> indexes
+ StringSetMap _view_map; // document field -> views
StringSetMap _field_map; // vsm summary field -> document fields
- void populate_index_map(VsmfieldsConfig& vsm_fields_config);
+ void populate_view_map(VsmfieldsConfig& vsm_fields_config);
void populate_field_map(VsmsummaryConfig& vsm_summary_config);
- void populate_indexes(StringSet& indexes, const vespalib::string& field) const;
+ void populate_views(StringSet& views, const vespalib::string& field) const;
public:
- KeywordExtractorFactory(VsmfieldsConfig& vsm_fields_config,
+ QueryTermFilterFactory(VsmfieldsConfig& vsm_fields_config,
VsmsummaryConfig& vsm_summary_config);
- ~KeywordExtractorFactory() override;
- std::shared_ptr<const search::docsummary::IKeywordExtractor> make(vespalib::stringref input_field) const override;
+ ~QueryTermFilterFactory() override;
+ std::shared_ptr<const search::docsummary::IQueryTermFilter> make(vespalib::stringref input_field) const override;
};
}
diff --git a/streamingvisitors/src/vespa/vsm/vsm/vsm-adapter.cpp b/streamingvisitors/src/vespa/vsm/vsm/vsm-adapter.cpp
index 13442eac1f8..8e5c5cfd8f1 100644
--- a/streamingvisitors/src/vespa/vsm/vsm/vsm-adapter.cpp
+++ b/streamingvisitors/src/vespa/vsm/vsm/vsm-adapter.cpp
@@ -4,17 +4,17 @@
#include "docsum_field_writer_factory.h"
#include "i_matching_elements_filler.h"
#include <vespa/searchlib/common/matching_elements.h>
-#include <vespa/searchsummary/docsummary/legacy_keyword_extractor.h>
-#include <vespa/searchsummary/docsummary/legacy_keyword_extractor_factory.h>
+#include <vespa/searchsummary/docsummary/legacy_query_term_filter.h>
+#include <vespa/searchsummary/docsummary/legacy_query_term_filter_factory.h>
#include <vespa/searchsummary/config/config-juniperrc.h>
#include <vespa/log/log.h>
LOG_SETUP(".vsm.vsm-adapter");
-using search::docsummary::IKeywordExtractorFactory;
+using search::docsummary::IQueryTermFilterFactory;
using search::docsummary::ResConfigEntry;
-using search::docsummary::LegacyKeywordExtractor;
-using search::docsummary::LegacyKeywordExtractorFactory;
+using search::docsummary::LegacyQueryTermFilter;
+using search::docsummary::LegacyQueryTermFilterFactory;
using search::MatchingElements;
using config::ConfigSnapshot;
using vespa::config::search::SummaryConfig;
@@ -148,20 +148,20 @@ VSMAdapter::configure(const VSMConfigSnapshot & snapshot)
docsumTools->setJuniper(std::move(juniper));
// init keyword extractor
- auto kwExtractor = std::make_unique<LegacyKeywordExtractor>();
- kwExtractor->addLegalIndexSpec(_highlightindexes.c_str());
- vespalib::string spec = kwExtractor->getLegalIndexSpec();
+ auto query_term_filter = std::make_unique<LegacyQueryTermFilter>();
+ query_term_filter->addLegalIndexSpec(_highlightindexes.c_str());
+ vespalib::string spec = query_term_filter->getLegalIndexSpec();
LOG(debug, "index highlight spec: '%s'", spec.c_str());
// init result config
auto resCfg = std::make_unique<ResultConfig>();
- std::unique_ptr<IKeywordExtractorFactory> keyword_extractor_factory = std::make_unique<LegacyKeywordExtractorFactory>(std::move(kwExtractor));
- auto docsum_field_writer_factory = std::make_unique<DocsumFieldWriterFactory>(summary.get()->usev8geopositions, *docsumTools, *keyword_extractor_factory, *_fieldsCfg.get());
+ std::unique_ptr<IQueryTermFilterFactory> query_term_filter_factory = std::make_unique<LegacyQueryTermFilterFactory>(std::move(query_term_filter));
+ auto docsum_field_writer_factory = std::make_unique<DocsumFieldWriterFactory>(summary.get()->usev8geopositions, *docsumTools, *query_term_filter_factory, *_fieldsCfg.get());
if ( !resCfg->readConfig(*summary.get(), _configId.c_str(), *docsum_field_writer_factory)) {
throw std::runtime_error("(re-)configuration of VSM (docsum tools) failed due to bad summary config");
}
docsum_field_writer_factory.reset();
- keyword_extractor_factory.reset();
+ query_term_filter_factory.reset();
// create dynamic docsum writer
auto writer = std::make_unique<DynamicDocsumWriter>(std::move(resCfg));