summaryrefslogtreecommitdiffstats
path: root/searchlib/src/tests/query/streaming_query_test.cpp
diff options
context:
space:
mode:
authorTor Egge <Tor.Egge@online.no>2024-01-12 13:54:48 +0100
committerTor Egge <Tor.Egge@online.no>2024-01-12 13:54:48 +0100
commitf7a4025bf64285ea5cbd3318e2b593f346a49050 (patch)
treeb0bbdb07ccaac0630deb50834adde7e6ac609fd3 /searchlib/src/tests/query/streaming_query_test.cpp
parenta26038a5e54b1c25f95a2e345b41a6816e46dcca (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.cpp57
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));