diff options
author | Tor Egge <Tor.Egge@online.no> | 2024-03-15 13:19:05 +0100 |
---|---|---|
committer | Tor Egge <Tor.Egge@online.no> | 2024-03-15 13:19:05 +0100 |
commit | e7f299d95f8fe6d0392e367598a3449d762f1604 (patch) | |
tree | a7c577f99c178e22770a817bcc97d18e66e885ad /streamingvisitors | |
parent | c44558af0a82be9dda1f1ba8bf84337789a906e5 (diff) |
Use filter settings from rank profiles and query terms in streaming search.
Diffstat (limited to 'streamingvisitors')
6 files changed, 28 insertions, 10 deletions
diff --git a/streamingvisitors/src/tests/rank_processor/rank_processor_test.cpp b/streamingvisitors/src/tests/rank_processor/rank_processor_test.cpp index a4a4b4e696f..ee9a08f3ecd 100644 --- a/streamingvisitors/src/tests/rank_processor/rank_processor_test.cpp +++ b/streamingvisitors/src/tests/rank_processor/rank_processor_test.cpp @@ -1,6 +1,7 @@ // Copyright Vespa.ai. Licensed under the terms of the Apache 2.0 license. See LICENSE in the project root. #include <vespa/searchvisitor/rankprocessor.h> +#include <vespa/searchlib/fef/test/indexenvironment.h> #include <vespa/searchlib/query/streaming/query.h> #include <vespa/searchlib/query/streaming/nearest_neighbor_query_node.h> #include <vespa/searchlib/query/tree/querybuilder.h> @@ -12,6 +13,7 @@ using search::fef::MatchData; using search::fef::TermFieldHandle; using search::fef::TermFieldMatchData; +using search::fef::test::IndexEnvironment; using search::query::Weight; using search::query::QueryBuilder; using search::query::SimpleQueryNodeTypes; @@ -82,13 +84,14 @@ RankProcessorTest::test_unpack_match_data_for_term_node(bool interleaved_feature tfmd->setNeedInterleavedFeatures(interleaved_features); auto invalid_id = TermFieldMatchData::invalidId(); EXPECT_EQ(invalid_id, tfmd->getDocId()); - RankProcessor::unpack_match_data(1, *md, *_query_wrapper); + IndexEnvironment ie; + RankProcessor::unpack_match_data(1, *md, *_query_wrapper, ie); EXPECT_EQ(invalid_id, tfmd->getDocId()); node->add(field_id, 0, 1, 0); node->add(field_id, 0, 1, 1); auto& field_info = node->getFieldInfo(field_id); field_info.setFieldLength(mock_field_length); - RankProcessor::unpack_match_data(2, *md, *_query_wrapper); + RankProcessor::unpack_match_data(2, *md, *_query_wrapper, ie); EXPECT_EQ(2, tfmd->getDocId()); if (interleaved_features) { EXPECT_EQ(mock_num_occs, tfmd->getNumOccs()); @@ -99,7 +102,7 @@ RankProcessorTest::test_unpack_match_data_for_term_node(bool interleaved_feature } EXPECT_EQ(2, tfmd->size()); node->reset(); - RankProcessor::unpack_match_data(3, *md, *_query_wrapper); + RankProcessor::unpack_match_data(3, *md, *_query_wrapper, ie); EXPECT_EQ(2, tfmd->getDocId()); } @@ -145,15 +148,16 @@ TEST_F(RankProcessorTest, unpack_match_data_for_nearest_neighbor_query_node) auto tfmd = md->resolveTermField(handle); auto invalid_id = TermFieldMatchData::invalidId(); EXPECT_EQ(invalid_id, tfmd->getDocId()); - RankProcessor::unpack_match_data(1, *md, *_query_wrapper); + IndexEnvironment ie; + RankProcessor::unpack_match_data(1, *md, *_query_wrapper, ie); EXPECT_EQ(invalid_id, tfmd->getDocId()); constexpr double distance = 1.5; node->set_distance(distance); - RankProcessor::unpack_match_data(2, *md, *_query_wrapper); + RankProcessor::unpack_match_data(2, *md, *_query_wrapper, ie); EXPECT_EQ(2, tfmd->getDocId()); EXPECT_EQ(distance * 2, tfmd->getRawScore()); node->reset(); - RankProcessor::unpack_match_data(3, *md, *_query_wrapper); + RankProcessor::unpack_match_data(3, *md, *_query_wrapper, ie); EXPECT_EQ(2, tfmd->getDocId()); } diff --git a/streamingvisitors/src/vespa/searchvisitor/indexenvironment.cpp b/streamingvisitors/src/vespa/searchvisitor/indexenvironment.cpp index 25c8d982f0f..726afcc959b 100644 --- a/streamingvisitors/src/vespa/searchvisitor/indexenvironment.cpp +++ b/streamingvisitors/src/vespa/searchvisitor/indexenvironment.cpp @@ -2,6 +2,7 @@ #include "indexenvironment.h" #include <vespa/searchlib/fef/i_ranking_assets_repo.h> +#include <vespa/searchlib/fef/indexproperties.h> using namespace search::fef; @@ -39,6 +40,16 @@ IndexEnvironment::addField(const vespalib::string& name, } void +IndexEnvironment::fixup_fields() +{ + for (auto& field : _fields) { + if (indexproperties::IsFilterField::check(_properties, field.name())) { + field.setFilter(true); + } + } +} + +void IndexEnvironment::set_ranking_assets_repo(std::shared_ptr<const IRankingAssetsRepo> ranking_assets_repo) { _ranking_assets_repo = std::move(ranking_assets_repo); diff --git a/streamingvisitors/src/vespa/searchvisitor/indexenvironment.h b/streamingvisitors/src/vespa/searchvisitor/indexenvironment.h index eed38b3c922..50e6898262d 100644 --- a/streamingvisitors/src/vespa/searchvisitor/indexenvironment.h +++ b/streamingvisitors/src/vespa/searchvisitor/indexenvironment.h @@ -78,6 +78,8 @@ public: bool isAttribute, search::fef::FieldInfo::DataType data_type); + void fixup_fields(); + search::fef::Properties & getProperties() { return _properties; } void set_ranking_assets_repo(std::shared_ptr<const search::fef::IRankingAssetsRepo> ranking_assets_repo); diff --git a/streamingvisitors/src/vespa/searchvisitor/rankmanager.cpp b/streamingvisitors/src/vespa/searchvisitor/rankmanager.cpp index 7b248faaa51..3efeb8ef168 100644 --- a/streamingvisitors/src/vespa/searchvisitor/rankmanager.cpp +++ b/streamingvisitors/src/vespa/searchvisitor/rankmanager.cpp @@ -135,6 +135,7 @@ RankManager::Snapshot::initRankSetup(const BlueprintFactory & factory) _indexEnv.push_back(_protoEnv.current()); IndexEnvironment & ie = _indexEnv.back(); ie.getProperties().import(_properties[i].second); + ie.fixup_fields(); } // set up individual rank setups per rank profile diff --git a/streamingvisitors/src/vespa/searchvisitor/rankprocessor.cpp b/streamingvisitors/src/vespa/searchvisitor/rankprocessor.cpp index 825630f057b..2a95bf8251b 100644 --- a/streamingvisitors/src/vespa/searchvisitor/rankprocessor.cpp +++ b/streamingvisitors/src/vespa/searchvisitor/rankprocessor.cpp @@ -292,16 +292,16 @@ void RankProcessor::unpackMatchData(uint32_t docId) { _docId = docId; - unpack_match_data(docId, *_match_data, _query); + unpack_match_data(docId, *_match_data, _query, _queryEnv.getIndexEnvironment()); } void -RankProcessor::unpack_match_data(uint32_t docid, MatchData &matchData, QueryWrapper& query) +RankProcessor::unpack_match_data(uint32_t docid, MatchData &matchData, QueryWrapper& query, const search::fef::IIndexEnvironment& index_env) { for (auto& term : query.getTermList()) { auto & qtd = static_cast<QueryTermData &>(term->getQueryItem()); const ITermData &td = qtd.getTermData(); - term->unpack_match_data(docid, td, matchData); + term->unpack_match_data(docid, td, matchData, index_env); } } diff --git a/streamingvisitors/src/vespa/searchvisitor/rankprocessor.h b/streamingvisitors/src/vespa/searchvisitor/rankprocessor.h index 476ed013d23..f384f7d7acf 100644 --- a/streamingvisitors/src/vespa/searchvisitor/rankprocessor.h +++ b/streamingvisitors/src/vespa/searchvisitor/rankprocessor.h @@ -74,7 +74,7 @@ public: void initForRanking(size_t wantedHitCount, bool use_sort_blob); void initForDumping(size_t wantedHitCount, bool use_sort_blob); void unpackMatchData(uint32_t docId); - static void unpack_match_data(uint32_t docid, search::fef::MatchData& matchData, QueryWrapper& query); + static void unpack_match_data(uint32_t docid, search::fef::MatchData& matchData, QueryWrapper& query, const search::fef::IIndexEnvironment& index_env); void runRankProgram(uint32_t docId); vespalib::FeatureSet::SP calculateFeatureSet(); vespalib::FeatureSet::SP calculateFeatureSet(search::DocumentIdT docId); |