summaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2024-04-17 13:49:26 +0000
committerHenning Baldersheim <balder@yahoo-inc.com>2024-04-17 13:49:26 +0000
commit092f5326447c3d7f8ebc9e8786868831bdf57943 (patch)
tree3628e576b64142690da3314af320183a81e11636 /searchlib
parent1862d47ff95d80fbd01ad77d3a79e3283f58603f (diff)
Use correct value for has_single_subspace template param.
Diffstat (limited to 'searchlib')
-rw-r--r--searchlib/src/tests/tensor/distance_calculator/distance_calculator_test.cpp4
-rw-r--r--searchlib/src/vespa/searchlib/features/distancefeature.cpp10
-rw-r--r--searchlib/src/vespa/searchlib/tensor/distance_calculator.h9
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();