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/vespa/searchlib/query/streaming/querynode.cpp | |
parent | a26038a5e54b1c25f95a2e345b41a6816e46dcca (diff) |
Calculate raw score for streaming search wand.
Diffstat (limited to 'searchlib/src/vespa/searchlib/query/streaming/querynode.cpp')
-rw-r--r-- | searchlib/src/vespa/searchlib/query/streaming/querynode.cpp | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/searchlib/src/vespa/searchlib/query/streaming/querynode.cpp b/searchlib/src/vespa/searchlib/query/streaming/querynode.cpp index 1e43c32a263..c24f41d16cf 100644 --- a/searchlib/src/vespa/searchlib/query/streaming/querynode.cpp +++ b/searchlib/src/vespa/searchlib/query/streaming/querynode.cpp @@ -5,6 +5,7 @@ #include <vespa/searchlib/parsequery/stackdumpiterator.h> #include <vespa/searchlib/query/streaming/dot_product_term.h> #include <vespa/searchlib/query/streaming/in_term.h> +#include <vespa/searchlib/query/streaming/wand_term.h> #include <vespa/searchlib/query/tree/term_vector.h> #include <charconv> #include <vespa/log/log.h> @@ -40,7 +41,6 @@ QueryNode::Build(const QueryNode * parent, const QueryNodeResultFactory & factor case ParseItem::ITEM_WEAK_AND: case ParseItem::ITEM_EQUIV: case ParseItem::ITEM_WEIGHTED_SET: - case ParseItem::ITEM_WAND: case ParseItem::ITEM_NOT: case ParseItem::ITEM_PHRASE: case ParseItem::ITEM_SAME_ELEMENT: @@ -56,9 +56,7 @@ QueryNode::Build(const QueryNode * parent, const QueryNodeResultFactory & factor } if ((type == ParseItem::ITEM_WEAK_AND) || (type == ParseItem::ITEM_WEIGHTED_SET) || - (type == ParseItem::ITEM_DOT_PRODUCT) || - (type == ParseItem::ITEM_SAME_ELEMENT) || - (type == ParseItem::ITEM_WAND)) + (type == ParseItem::ITEM_SAME_ELEMENT)) { qn->setIndex(queryRep.getIndexName()); } @@ -191,6 +189,9 @@ QueryNode::Build(const QueryNode * parent, const QueryNodeResultFactory & factor case ParseItem::ITEM_DOT_PRODUCT: qn = build_dot_product_term(factory, queryRep); break; + case ParseItem::ITEM_WAND: + qn = build_wand_term(factory, queryRep); + break; default: skip_unknown(queryRep); break; @@ -251,13 +252,24 @@ QueryNode::populate_multi_term(Normalizing string_normalize_mode, MultiTerm& mt, std::unique_ptr<QueryNode> QueryNode::build_dot_product_term(const QueryNodeResultFactory& factory, SimpleQueryStackDumpIterator& queryRep) { - auto dp =std::make_unique<DotProductTerm>(factory.create(), queryRep.getIndexName(), queryRep.getArity()); + auto dp = std::make_unique<DotProductTerm>(factory.create(), queryRep.getIndexName(), queryRep.getArity()); dp->setWeight(queryRep.GetWeight()); dp->setUniqueId(queryRep.getUniqueId()); populate_multi_term(factory.normalizing_mode(dp->index()), *dp, queryRep); return dp; } +std::unique_ptr<QueryNode> +QueryNode::build_wand_term(const QueryNodeResultFactory& factory, SimpleQueryStackDumpIterator& queryRep) +{ + auto wand = std::make_unique<WandTerm>(factory.create(), queryRep.getIndexName(), queryRep.getArity()); + wand->setWeight(queryRep.GetWeight()); + wand->setUniqueId(queryRep.getUniqueId()); + wand->set_score_threshold(queryRep.getScoreThreshold()); + populate_multi_term(factory.normalizing_mode(wand->index()), *wand, queryRep); + return wand; +} + void QueryNode::skip_unknown(SimpleQueryStackDumpIterator& queryRep) { |