diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2024-04-17 13:49:26 +0000 |
---|---|---|
committer | Henning Baldersheim <balder@yahoo-inc.com> | 2024-04-17 13:49:26 +0000 |
commit | 092f5326447c3d7f8ebc9e8786868831bdf57943 (patch) | |
tree | 3628e576b64142690da3314af320183a81e11636 /searchlib | |
parent | 1862d47ff95d80fbd01ad77d3a79e3283f58603f (diff) |
Use correct value for has_single_subspace template param.
Diffstat (limited to 'searchlib')
3 files changed, 15 insertions, 8 deletions
diff --git a/searchlib/src/tests/tensor/distance_calculator/distance_calculator_test.cpp b/searchlib/src/tests/tensor/distance_calculator/distance_calculator_test.cpp index dab335675d8..4ffc1fe366e 100644 --- a/searchlib/src/tests/tensor/distance_calculator/distance_calculator_test.cpp +++ b/searchlib/src/tests/tensor/distance_calculator/distance_calculator_test.cpp @@ -51,7 +51,9 @@ public: double calc_rawscore(uint32_t docid, const vespalib::string& query_tensor) { auto qt = make_tensor(query_tensor); auto calc = DistanceCalculator::make_with_validation(*attr, *qt); - return calc->calc_raw_score(docid); + return calc->has_single_subspace() + ? calc->calc_raw_score<true>(docid) + : calc->calc_raw_score<false>(docid); } OptSubspace calc_closest_subspace(uint32_t docid, const vespalib::string& query_tensor) { auto qt = make_tensor(query_tensor); diff --git a/searchlib/src/vespa/searchlib/features/distancefeature.cpp b/searchlib/src/vespa/searchlib/features/distancefeature.cpp index 15362b6a224..65a764d8b44 100644 --- a/searchlib/src/vespa/searchlib/features/distancefeature.cpp +++ b/searchlib/src/vespa/searchlib/features/distancefeature.cpp @@ -12,7 +12,6 @@ #include <vespa/vespalib/geo/zcurve.h> #include <vespa/vespalib/util/issue.h> #include <vespa/vespalib/util/stash.h> -#include <cmath> #include <limits> #include <vespa/log/log.h> @@ -62,7 +61,7 @@ ConvertRawscoreToDistance::execute(uint32_t docId) feature_t converted = elem.calc ? elem.calc->function().to_distance(invdist) : ((1.0 / invdist) - 1.0); min_distance = std::min(min_distance, converted); } else if (elem.calc) { - feature_t invdist = elem.calc->calc_raw_score(docId); + feature_t invdist = elem.calc->calc_raw_score<false>(docId); feature_t converted = elem.calc->function().to_distance(invdist); min_distance = std::min(min_distance, converted); } @@ -130,7 +129,10 @@ GeoGCDExecutor::GeoGCDExecutor(GeoLocationSpecPtrs locations, const attribute::I : FeatureExecutor(), _locations(), _pos(pos), - _intBuf() + _intBuf(), + _best_index(0.0), + _best_lat(0.0), + _best_lng(0.0) { if (_pos == nullptr) { return; @@ -140,7 +142,7 @@ GeoGCDExecutor::GeoGCDExecutor(GeoLocationSpecPtrs locations, const attribute::I if (p && p->location.valid() && p->location.has_point) { double lat = p->location.point.y / 1.0e6; double lng = p->location.point.x / 1.0e6; - _locations.emplace_back(search::common::GeoGcd{lat, lng}); + _locations.emplace_back(lat, lng); } } } diff --git a/searchlib/src/vespa/searchlib/tensor/distance_calculator.h b/searchlib/src/vespa/searchlib/tensor/distance_calculator.h index 9848c1caca8..9fa67885bff 100644 --- a/searchlib/src/vespa/searchlib/tensor/distance_calculator.h +++ b/searchlib/src/vespa/searchlib/tensor/distance_calculator.h @@ -39,11 +39,14 @@ public: const BoundDistanceFunction& function() const noexcept { return *_dist_fun; } bool has_single_subspace() const noexcept { return _attr_tensor.getTensorType().is_dense(); } - template<bool has_single_subspace=false> + template<bool has_single_subspace> double calc_raw_score(uint32_t docid) const { if (has_single_subspace) { - double distance = _dist_fun->calc(_attr_tensor.get_vector(docid, 0)); - return _dist_fun->to_rawscore(distance); + auto cells = _attr_tensor.get_vector(docid, 0); + if (cells.size == 0) [[unlikely]] { + return _dist_fun->min_rawscore(); + } + return _dist_fun->to_rawscore(_dist_fun->calc(cells)); } else { auto vectors = _attr_tensor.get_vectors(docid); double result = _dist_fun->min_rawscore(); |