diff options
author | Geir Storli <geirst@yahooinc.com> | 2023-04-20 13:53:05 +0000 |
---|---|---|
committer | Geir Storli <geirst@yahooinc.com> | 2023-04-20 14:07:29 +0000 |
commit | ea513ec5e898b82c97a1a161c06698843bf43d69 (patch) | |
tree | 32187aaf1cb1274c791c75754438e74bfa67f91a /streamingvisitors/src/tests | |
parent | 687be0d6e22caca23708de1493fb483069bbab0a (diff) |
Provide FieldPathMap and IQueryEnvironment when preparing streaming searchers.
This is required to prepare the NearestNeighborFieldSearcher.
Diffstat (limited to 'streamingvisitors/src/tests')
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(); |