aboutsummaryrefslogtreecommitdiffstats
path: root/streamingvisitors/src/tests
diff options
context:
space:
mode:
authorGeir Storli <geirst@yahooinc.com>2023-04-20 13:53:05 +0000
committerGeir Storli <geirst@yahooinc.com>2023-04-20 14:07:29 +0000
commitea513ec5e898b82c97a1a161c06698843bf43d69 (patch)
tree32187aaf1cb1274c791c75754438e74bfa67f91a /streamingvisitors/src/tests
parent687be0d6e22caca23708de1493fb483069bbab0a (diff)
Provide FieldPathMap and IQueryEnvironment when preparing streaming searchers.
This is required to prepare the NearestNeighborFieldSearcher.
Diffstat (limited to 'streamingvisitors/src/tests')
-rw-r--r--streamingvisitors/src/tests/matching_elements_filler/CMakeLists.txt1
-rw-r--r--streamingvisitors/src/tests/matching_elements_filler/matching_elements_filler_test.cpp12
-rw-r--r--streamingvisitors/src/tests/nearest_neighbor_field_searcher/nearest_neighbor_field_searcher_test.cpp36
-rw-r--r--streamingvisitors/src/tests/searcher/CMakeLists.txt2
-rw-r--r--streamingvisitors/src/tests/searcher/searcher_test.cpp30
5 files changed, 40 insertions, 41 deletions
diff --git a/streamingvisitors/src/tests/matching_elements_filler/CMakeLists.txt b/streamingvisitors/src/tests/matching_elements_filler/CMakeLists.txt
index 5cc2977b3c3..efe5c0507ab 100644
--- a/streamingvisitors/src/tests/matching_elements_filler/CMakeLists.txt
+++ b/streamingvisitors/src/tests/matching_elements_filler/CMakeLists.txt
@@ -3,6 +3,7 @@ vespa_add_executable(streamingvisitors_matching_elements_filler_test_app TEST
SOURCES
matching_elements_filler_test.cpp
DEPENDS
+ searchlib_test
streamingvisitors
GTest::GTest
)
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 458031b5f01..dbe9dde469d 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
@@ -21,6 +21,7 @@
#include <vespa/vespalib/gtest/gtest.h>
#include <vespa/vsm/searcher/fieldsearcher.h>
#include <vespa/vsm/searcher/intfieldsearcher.h>
+#include <vespa/vsm/searcher/mock_field_searcher_env.h>
#include <vespa/vsm/searcher/utf8strchrfieldsearcher.h>
#include <iostream>
@@ -273,13 +274,12 @@ MatchingElementsFields make_matching_elements_fields() {
class MatchingElementsFillerTest : public ::testing::Test {
const MyDocType _doc_type;
MatchingElementsFields _matching_elems_fields;
- vsm::SharedFieldPathMap _field_path_map;
+ vsm::test::MockFieldSearcherEnv _env;
vsm::FieldIdTSearcherMap _field_searcher_map;
vsm::DocumentTypeIndexFieldMapT _index_to_field_ids;
HitCollector _hit_collector;
SearchResult _search_result;
Query _query;
- vsm::SharedSearcherBuf _shared_searcher_buf;
std::unique_ptr<MatchingElementsFiller> _matching_elements_filler;
std::unique_ptr<MatchingElements> _matching_elements;
std::unique_ptr<StorageDocument> _sdoc;
@@ -296,19 +296,19 @@ MatchingElementsFillerTest::MatchingElementsFillerTest()
: ::testing::Test(),
_doc_type(),
_matching_elems_fields(make_matching_elements_fields()),
- _field_path_map(make_field_path_map(_doc_type)),
+ _env(),
_field_searcher_map(make_field_searcher_map()),
_index_to_field_ids(make_index_to_field_ids()),
_hit_collector(10),
_search_result(),
_query(),
- _shared_searcher_buf(std::make_shared<vsm::SearcherBuf>()),
_matching_elements_filler(),
_matching_elements(),
_sdoc()
{
+ _env.field_paths = make_field_path_map(_doc_type);
_search_result.addHit(1, "id::test::1", 0.0, nullptr, 0);
- _sdoc = std::make_unique<StorageDocument>(_doc_type.make_test_doc(), _field_path_map, _field_path_map->size());
+ _sdoc = std::make_unique<StorageDocument>(_doc_type.make_test_doc(), _env.field_paths, _env.field_paths->size());
EXPECT_TRUE(_sdoc->valid());
MatchData md(MatchData::params());
_hit_collector.addHit(_sdoc.get(), 1, md, 0.0, nullptr, 0);
@@ -322,7 +322,7 @@ MatchingElementsFillerTest::fill_matching_elements(Query &&query)
_matching_elements_filler.reset();
_matching_elements.reset();
_query = std::move(query);
- _field_searcher_map.prepare(_index_to_field_ids, _shared_searcher_buf, _query);
+ _env.prepare(_field_searcher_map, _index_to_field_ids, _query);
_matching_elements_filler = std::make_unique<MatchingElementsFiller>(_field_searcher_map, _query, _hit_collector, _search_result);
_matching_elements = _matching_elements_filler->fill_matching_elements(_matching_elems_fields);
}
diff --git a/streamingvisitors/src/tests/nearest_neighbor_field_searcher/nearest_neighbor_field_searcher_test.cpp b/streamingvisitors/src/tests/nearest_neighbor_field_searcher/nearest_neighbor_field_searcher_test.cpp
index 70c3ae1002f..43c77398be8 100644
--- a/streamingvisitors/src/tests/nearest_neighbor_field_searcher/nearest_neighbor_field_searcher_test.cpp
+++ b/streamingvisitors/src/tests/nearest_neighbor_field_searcher/nearest_neighbor_field_searcher_test.cpp
@@ -1,5 +1,6 @@
// Copyright Yahoo. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root.
+#include <vespa/document/base/fieldpath.h>
#include <vespa/document/datatype/tensor_data_type.h>
#include <vespa/document/fieldvalue/tensorfieldvalue.h>
#include <vespa/eval/eval/simple_value.h>
@@ -7,14 +8,10 @@
#include <vespa/eval/eval/value_codec.h>
#include <vespa/eval/eval/value_type.h>
#include <vespa/searchlib/fef/indexproperties.h>
-#include <vespa/searchlib/fef/properties.h>
-#include <vespa/searchlib/fef/tablemanager.h>
#include <vespa/searchlib/query/streaming/nearest_neighbor_query_node.h>
#include <vespa/searchlib/tensor/euclidean_distance.h>
-#include <vespa/searchlib/test/mock_attribute_manager.h>
-#include <vespa/searchvisitor/indexenvironment.h>
-#include <vespa/searchvisitor/queryenvironment.h>
#include <vespa/vespalib/gtest/gtest.h>
+#include <vespa/vsm/searcher/mock_field_searcher_env.h>
#include <vespa/vsm/searcher/nearest_neighbor_field_searcher.h>
using namespace search::attribute::test;
@@ -25,8 +22,10 @@ using namespace search::tensor;
using namespace vespalib::eval;
using namespace vsm;
-using document::TensorFieldValue;
+using document::FieldPath;
+using document::FieldPathEntry;
using document::TensorDataType;
+using document::TensorFieldValue;
struct MockQuery {
std::vector<std::unique_ptr<NearestNeighborQueryNode>> nodes;
@@ -53,41 +52,36 @@ struct MockQuery {
class NearestNeighborSearcherTest : public testing::Test {
public:
- TableManager table_mgr;
- streaming::IndexEnvironment index_env;
- MockAttributeManager attr_mgr;
- Properties query_props;
- streaming::QueryEnvironment query_env;
+ vsm::test::MockFieldSearcherEnv env;
ValueType tensor_type;
TensorDataType data_type;
SquaredEuclideanDistance dist_func;
+ vsm::FieldIdT field_id;
NearestNeighborFieldSearcher searcher;
MockQuery query;
NearestNeighborSearcherTest()
- : table_mgr(),
- index_env(table_mgr),
- attr_mgr(),
- query_props(),
- query_env("", index_env, query_props, &attr_mgr),
+ : env(),
tensor_type(ValueType::from_spec("tensor(x[2])")),
data_type(tensor_type),
dist_func(CellType::DOUBLE),
- searcher(7, DistanceMetric::Euclidean),
+ field_id(2),
+ searcher(field_id, DistanceMetric::Euclidean),
query()
{
+ env.field_paths->resize(field_id + 1);
+ (*env.field_paths)[field_id].push_back(std::make_unique<FieldPathEntry>(data_type, "my_tensor_field"));
}
void set_query_tensor(const vespalib::string& query_tensor_name,
const vespalib::string& spec_expr) {
- search::fef::indexproperties::type::QueryFeature::set(index_env.getProperties(), query_tensor_name, tensor_type.to_spec());
+ search::fef::indexproperties::type::QueryFeature::set(env.index_env.getProperties(), query_tensor_name, tensor_type.to_spec());
auto tensor = SimpleValue::from_spec(TensorSpec::from_expr(spec_expr));
vespalib::nbostream stream;
vespalib::eval::encode_value(*tensor, stream);
- query_props.add(query_tensor_name, vespalib::stringref(stream.peek(), stream.size()));
+ env.query_props.add(query_tensor_name, vespalib::stringref(stream.peek(), stream.size()));
}
void prepare() {
- auto searcher_buf = std::make_shared<SearcherBuf>();
- searcher.prepare_new(query.term_list, searcher_buf, tensor_type, query_env);
+ env.prepare(searcher, query.term_list);
}
void match(const vespalib::string& spec_expr) {
TensorFieldValue fv(data_type);
diff --git a/streamingvisitors/src/tests/searcher/CMakeLists.txt b/streamingvisitors/src/tests/searcher/CMakeLists.txt
index 2277f5ef55f..d43c1b58d33 100644
--- a/streamingvisitors/src/tests/searcher/CMakeLists.txt
+++ b/streamingvisitors/src/tests/searcher/CMakeLists.txt
@@ -3,6 +3,8 @@ vespa_add_executable(vsm_searcher_test_app TEST
SOURCES
searcher_test.cpp
DEPENDS
+ searchlib
+ searchlib_test
streamingvisitors
)
vespa_add_test(NAME vsm_searcher_test_app COMMAND vsm_searcher_test_app)
diff --git a/streamingvisitors/src/tests/searcher/searcher_test.cpp b/streamingvisitors/src/tests/searcher/searcher_test.cpp
index 607e418ac83..6c4ac69298e 100644
--- a/streamingvisitors/src/tests/searcher/searcher_test.cpp
+++ b/streamingvisitors/src/tests/searcher/searcher_test.cpp
@@ -2,19 +2,20 @@
#include <vespa/vespalib/testkit/testapp.h>
+#include <vespa/document/fieldvalue/fieldvalues.h>
+#include <vespa/searchlib/query/streaming/queryterm.h>
+#include <vespa/vsm/searcher/boolfieldsearcher.h>
#include <vespa/vsm/searcher/fieldsearcher.h>
#include <vespa/vsm/searcher/floatfieldsearcher.h>
#include <vespa/vsm/searcher/futf8strchrfieldsearcher.h>
#include <vespa/vsm/searcher/intfieldsearcher.h>
-#include <vespa/vsm/searcher/boolfieldsearcher.h>
-#include <vespa/vsm/searcher/utf8flexiblestringfieldsearcher.h>
+#include <vespa/vsm/searcher/mock_field_searcher_env.h>
#include <vespa/vsm/searcher/utf8exactstringfieldsearcher.h>
+#include <vespa/vsm/searcher/utf8flexiblestringfieldsearcher.h>
#include <vespa/vsm/searcher/utf8substringsearcher.h>
#include <vespa/vsm/searcher/utf8substringsnippetmodifier.h>
#include <vespa/vsm/searcher/utf8suffixstringfieldsearcher.h>
#include <vespa/vsm/vsm/snippetmodifier.h>
-#include <vespa/searchlib/query/streaming/queryterm.h>
-#include <vespa/document/fieldvalue/fieldvalues.h>
using namespace document;
using search::streaming::HitList;
@@ -102,7 +103,7 @@ struct SnippetModifierSetup
{
Query query;
UTF8SubstringSnippetModifier::SP searcher;
- SharedSearcherBuf buf;
+ test::MockFieldSearcherEnv env;
SnippetModifier modifier;
explicit SnippetModifierSetup(const StringList & terms);
~SnippetModifierSetup();
@@ -111,10 +112,10 @@ struct SnippetModifierSetup
SnippetModifierSetup::SnippetModifierSetup(const StringList & terms)
: query(terms),
searcher(new UTF8SubstringSnippetModifier()),
- buf(new SearcherBuf(8)),
+ env(),
modifier(searcher)
{
- searcher->prepare(query.qtl, buf);
+ env.prepare(*searcher, query.qtl);
}
SnippetModifierSetup::~SnippetModifierSetup() = default;
@@ -310,8 +311,8 @@ performSearch(FieldSearcher & fs, const StringList & query, const FieldValue & f
Query q(query);
// prepare field searcher
- SharedSearcherBuf ssb = SharedSearcherBuf(new SearcherBuf());
- fs.prepare(q.qtl, ssb);
+ test::MockFieldSearcherEnv env;
+ env.prepare(fs, q.qtl);
// setup document
SharedFieldPathMap sfim(new FieldPathMapT());
@@ -786,39 +787,40 @@ TEST("snippet modifier manager") {
indexMap["i1"].push_back(1);
indexMap["i2"].push_back(0);
indexMap["i2"].push_back(1);
+ test::MockFieldSearcherEnv env;
{
SnippetModifierManager man;
Query query(StringList().add("i0:foo"));
- man.setup(query.qtl, specMap, indexMap);
+ man.setup(query.qtl, specMap, indexMap, *env.field_paths, env.query_env);
assertQueryTerms(man, 0, StringList().add("foo"));
assertQueryTerms(man, 1, StringList());
}
{
SnippetModifierManager man;
Query query(StringList().add("i1:foo"));
- man.setup(query.qtl, specMap, indexMap);
+ man.setup(query.qtl, specMap, indexMap, *env.field_paths, env.query_env);
assertQueryTerms(man, 0, StringList());
assertQueryTerms(man, 1, StringList());
}
{
SnippetModifierManager man;
Query query(StringList().add("i1:*foo*"));
- man.setup(query.qtl, specMap, indexMap);
+ man.setup(query.qtl, specMap, indexMap, *env.field_paths, env.query_env);
assertQueryTerms(man, 0, StringList());
assertQueryTerms(man, 1, StringList().add("foo"));
}
{
SnippetModifierManager man;
Query query(StringList().add("i2:foo").add("i2:*bar*"));
- man.setup(query.qtl, specMap, indexMap);
+ man.setup(query.qtl, specMap, indexMap, *env.field_paths, env.query_env);
assertQueryTerms(man, 0, StringList().add("foo").add("bar"));
assertQueryTerms(man, 1, StringList().add("bar"));
}
{ // check buffer sizes
SnippetModifierManager man;
Query query(StringList().add("i2:foo").add("i2:*bar*"));
- man.setup(query.qtl, specMap, indexMap);
+ man.setup(query.qtl, specMap, indexMap, *env.field_paths, env.query_env);
{
SnippetModifier * sm = static_cast<SnippetModifier *>(man.getModifiers().getModifier(0));
UTF8SubstringSnippetModifier * searcher = sm->getSearcher().get();