diff options
author | Tor Egge <Tor.Egge@online.no> | 2024-01-12 13:54:48 +0100 |
---|---|---|
committer | Tor Egge <Tor.Egge@online.no> | 2024-01-12 13:54:48 +0100 |
commit | f7a4025bf64285ea5cbd3318e2b593f346a49050 (patch) | |
tree | b0bbdb07ccaac0630deb50834adde7e6ac609fd3 /searchlib/src/tests/query/streaming_query_test.cpp | |
parent | a26038a5e54b1c25f95a2e345b41a6816e46dcca (diff) |
Calculate raw score for streaming search wand.
Diffstat (limited to 'searchlib/src/tests/query/streaming_query_test.cpp')
-rw-r--r-- | searchlib/src/tests/query/streaming_query_test.cpp | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/searchlib/src/tests/query/streaming_query_test.cpp b/searchlib/src/tests/query/streaming_query_test.cpp index c4ef2028123..2a71fce85c3 100644 --- a/searchlib/src/tests/query/streaming_query_test.cpp +++ b/searchlib/src/tests/query/streaming_query_test.cpp @@ -6,6 +6,7 @@ #include <vespa/searchlib/query/streaming/in_term.h> #include <vespa/searchlib/query/streaming/query.h> #include <vespa/searchlib/query/streaming/nearest_neighbor_query_node.h> +#include <vespa/searchlib/query/streaming/wand_term.h> #include <vespa/searchlib/query/tree/querybuilder.h> #include <vespa/searchlib/query/tree/simplequery.h> #include <vespa/searchlib/query/tree/stackdumpcreator.h> @@ -957,6 +958,62 @@ TEST(StreamingQueryTest, dot_product_term) EXPECT_EQ(-17 * 27 + 9 * 2, tmd1->getRawScore()); } +namespace { + +constexpr double exp_wand_score = 13 * 27 + 4 * 2; +constexpr double exp_wand_hidden_score = 17 * 27 + 9 * 2; + +void +check_wand_term(double limit, const vespalib::string& label) +{ + SCOPED_TRACE(label); + search::streaming::WandTerm term({}, "index", 2); + term.add_term(std::make_unique<QueryTerm>(std::unique_ptr<QueryNodeResultBase>(), "7", "", QueryTermSimple::Type::WORD)); + term.get_terms().back()->setWeight(Weight(27)); + term.add_term(std::make_unique<QueryTerm>(std::unique_ptr<QueryNodeResultBase>(), "9", "", QueryTermSimple::Type::WORD)); + term.get_terms().back()->setWeight(Weight(2)); + EXPECT_EQ(2, term.get_terms().size()); + term.set_score_threshold(limit); + SimpleTermData td; + td.addField(10); + td.addField(11); + td.addField(12); + td.lookupField(10)->setHandle(0); + td.lookupField(12)->setHandle(1); + EXPECT_FALSE(term.evaluate()); + auto& q0 = *term.get_terms()[0]; + q0.add(0, 11, 0, 17); + q0.add(0, 12, 0, 13); + auto& q1 = *term.get_terms()[1]; + q1.add(0, 11, 0, 9); + q1.add(0, 12, 0, 4); + EXPECT_EQ(limit < exp_wand_hidden_score, term.evaluate()); + MatchData md(MatchData::params().numTermFields(2)); + term.unpack_match_data(23, td, md); + auto tmd0 = md.resolveTermField(0); + EXPECT_NE(23, tmd0->getDocId()); + auto tmd1 = md.resolveTermField(1); + if (limit < exp_wand_score) { + EXPECT_EQ(23, tmd1->getDocId()); + EXPECT_EQ(exp_wand_score, tmd1->getRawScore()); + } else { + EXPECT_NE(23, tmd1->getDocId()); + } +} + +} + +TEST(StreamingQueryTest, wand_term) +{ + check_wand_term(0.0, "no limit"); + check_wand_term(exp_wand_score - 1, "score above limit"); + check_wand_term(exp_wand_score, "score at limit"); + check_wand_term(exp_wand_score + 1, "score below limit"); + check_wand_term(exp_wand_hidden_score - 1, "hidden score above limit"); + check_wand_term(exp_wand_hidden_score, "hidden score at limit"); + check_wand_term(exp_wand_hidden_score + 1, "hidden score below limit"); +} + TEST(StreamingQueryTest, control_the_size_of_query_terms) { EXPECT_EQ(112u, sizeof(QueryTermSimple)); |