summaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorGeir Storli <geirst@yahooinc.com>2023-04-18 15:40:17 +0000
committerGeir Storli <geirst@yahooinc.com>2023-04-18 15:41:36 +0000
commit3e6e8013489e9319e96b85b82f40b732796e0b91 (patch)
tree7c9b62335c20fa285b2863622dde355de3112cfe /searchlib
parent38040357527c9bab9951c59ee1687520e677b422 (diff)
Add raw score that also signals a match.
Diffstat (limited to 'searchlib')
-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; }
};
}