summaryrefslogtreecommitdiffstats
path: root/searchlib/src/vespa/searchlib/tensor/distance_calculator.h
diff options
context:
space:
mode:
Diffstat (limited to 'searchlib/src/vespa/searchlib/tensor/distance_calculator.h')
-rw-r--r--searchlib/src/vespa/searchlib/tensor/distance_calculator.h16
1 files changed, 16 insertions, 0 deletions
diff --git a/searchlib/src/vespa/searchlib/tensor/distance_calculator.h b/searchlib/src/vespa/searchlib/tensor/distance_calculator.h
index f1cc7feb9df..3ef41906b92 100644
--- a/searchlib/src/vespa/searchlib/tensor/distance_calculator.h
+++ b/searchlib/src/vespa/searchlib/tensor/distance_calculator.h
@@ -6,6 +6,8 @@
namespace vespalib::eval { struct Value; }
+namespace search::attribute { class IAttributeVector; }
+
namespace search::tensor {
/**
@@ -40,9 +42,23 @@ public:
const vespalib::eval::Value& query_tensor() const { return *_query_tensor; }
const DistanceFunction& function() const { return *_dist_fun; }
+ double calc_raw_score(uint32_t docid) const {
+ double distance = _dist_fun->calc(_query_tensor_cells, _attr_tensor.extract_cells_ref(docid));
+ return _dist_fun->to_rawscore(distance);
+ }
+
double calc_with_limit(uint32_t docid, double limit) const {
return _dist_fun->calc_with_limit(_query_tensor_cells, _attr_tensor.extract_cells_ref(docid), limit);
}
+
+ /**
+ * Create a calculator for the given attribute tensor and query tensor, if possible.
+ *
+ * Throws vespalib::IllegalArgumentException if the inputs are not supported or incompatible.
+ */
+ static std::unique_ptr<DistanceCalculator> make_with_validation(const search::attribute::IAttributeVector& attr,
+ const vespalib::eval::Value& query_tensor_in);
+
};
}