aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGeir Storli <geirst@yahooinc.com>2023-04-18 18:37:43 +0200
committerGitHub <noreply@github.com>2023-04-18 18:37:43 +0200
commit99c785443065ce08cfdf6ff78c63fd050881c857 (patch)
tree85d15cf440188473bbc93f1bd886aaf2dc11e46e
parentd254c77147f47b2b1075ae9c1e0f707811d58cb7 (diff)
parent3e6e8013489e9319e96b85b82f40b732796e0b91 (diff)
Merge pull request #26773 from vespa-engine/geirst/raw-score-nearest-neighbor-node
Add raw score that also signals a match.
-rw-r--r--searchlib/src/vespa/searchlib/query/streaming/nearest_neighbor_query_node.cpp15
-rw-r--r--searchlib/src/vespa/searchlib/query/streaming/nearest_neighbor_query_node.h14
2 files changed, 25 insertions, 4 deletions
diff --git a/searchlib/src/vespa/searchlib/query/streaming/nearest_neighbor_query_node.cpp b/searchlib/src/vespa/searchlib/query/streaming/nearest_neighbor_query_node.cpp
index fdc513f9617..d1c37cd6dcd 100644
--- a/searchlib/src/vespa/searchlib/query/streaming/nearest_neighbor_query_node.cpp
+++ b/searchlib/src/vespa/searchlib/query/streaming/nearest_neighbor_query_node.cpp
@@ -6,7 +6,8 @@ namespace search::streaming {
NearestNeighborQueryNode::NearestNeighborQueryNode(std::unique_ptr<QueryNodeResultBase> resultBase, const string& term, const string& index, int32_t id, search::query::Weight weight, double distance_threshold)
: QueryTerm(std::move(resultBase), term, index, Type::NEAREST_NEIGHBOR),
- _distance_threshold(distance_threshold)
+ _distance_threshold(distance_threshold),
+ _raw_score()
{
setUniqueId(id);
setWeight(weight);
@@ -14,6 +15,18 @@ NearestNeighborQueryNode::NearestNeighborQueryNode(std::unique_ptr<QueryNodeResu
NearestNeighborQueryNode::~NearestNeighborQueryNode() = default;
+bool
+NearestNeighborQueryNode::evaluate() const
+{
+ return _raw_score.has_value();
+}
+
+void
+NearestNeighborQueryNode::reset()
+{
+ _raw_score.reset();
+}
+
NearestNeighborQueryNode*
NearestNeighborQueryNode::as_nearest_neighbor_query_node() noexcept
{
diff --git a/searchlib/src/vespa/searchlib/query/streaming/nearest_neighbor_query_node.h b/searchlib/src/vespa/searchlib/query/streaming/nearest_neighbor_query_node.h
index ddc84a4b6d3..0beb130c53d 100644
--- a/searchlib/src/vespa/searchlib/query/streaming/nearest_neighbor_query_node.h
+++ b/searchlib/src/vespa/searchlib/query/streaming/nearest_neighbor_query_node.h
@@ -3,15 +3,19 @@
#pragma once
#include "queryterm.h"
+#include <optional>
namespace search::streaming {
/*
* Nearest neighbor query node.
*/
-class NearestNeighborQueryNode: public QueryTerm
-{
- double _distance_threshold;
+class NearestNeighborQueryNode: public QueryTerm {
+private:
+ double _distance_threshold;
+ // When this value is set it also indicates a match
+ std::optional<double> _raw_score;
+
public:
NearestNeighborQueryNode(std::unique_ptr<QueryNodeResultBase> resultBase, const string& term, const string& index, int32_t id, search::query::Weight weight, double distance_threshold);
NearestNeighborQueryNode(const NearestNeighborQueryNode &) = delete;
@@ -19,9 +23,13 @@ public:
NearestNeighborQueryNode(NearestNeighborQueryNode &&) = delete;
NearestNeighborQueryNode & operator = (NearestNeighborQueryNode &&) = delete;
~NearestNeighborQueryNode() override;
+ bool evaluate() const override;
+ void reset() override;
NearestNeighborQueryNode* as_nearest_neighbor_query_node() noexcept override;
const vespalib::string& get_query_tensor_name() const { return getTermString(); }
double get_distance_threshold() const { return _distance_threshold; }
+ void set_raw_score(double value) { _raw_score = value; }
+ const std::optional<double>& get_raw_score() const noexcept { return _raw_score; }
};
}