diff options
Diffstat (limited to 'searchlib/src/vespa/searchlib/tensor/distance_calculator.h')
-rw-r--r-- | searchlib/src/vespa/searchlib/tensor/distance_calculator.h | 16 |
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); + }; } |