aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenning Baldersheim <balder@yahoo-inc.com>2023-05-24 22:16:47 +0200
committerGitHub <noreply@github.com>2023-05-24 22:16:47 +0200
commit6a66fbde67c747ee6492cffa33ee2e8cfca28d97 (patch)
tree45d711bae29da900581d99f8806b3228378b9701
parent1d445d46f6c4662d64ff77c81b068163d4077479 (diff)
parent81effa202b43da3a9c3d47a3ac2edbce40a1c478 (diff)
Merge pull request #27206 from vespa-engine/toregge/use-distance-metrics-util-in-nearest-neighbor-field-searcher
Use DistanceMetricUtils for converting string value to distance metric.
-rw-r--r--streamingvisitors/src/vespa/vsm/searcher/nearest_neighbor_field_searcher.cpp28
1 files changed, 14 insertions, 14 deletions
diff --git a/streamingvisitors/src/vespa/vsm/searcher/nearest_neighbor_field_searcher.cpp b/streamingvisitors/src/vespa/vsm/searcher/nearest_neighbor_field_searcher.cpp
index d4aee8ad652..c6dfa792c6a 100644
--- a/streamingvisitors/src/vespa/vsm/searcher/nearest_neighbor_field_searcher.cpp
+++ b/streamingvisitors/src/vespa/vsm/searcher/nearest_neighbor_field_searcher.cpp
@@ -5,6 +5,7 @@
#include <vespa/document/datatype/tensor_data_type.h>
#include <vespa/document/fieldvalue/tensorfieldvalue.h>
#include <vespa/searchcommon/attribute/config.h>
+#include <vespa/searchlib/attribute/distance_metric_utils.h>
#include <vespa/searchlib/fef/iqueryenvironment.h>
#include <vespa/searchlib/fef/query_value.h>
#include <vespa/searchlib/query/streaming/nearest_neighbor_query_node.h>
@@ -14,10 +15,14 @@
#include <vespa/searchlib/tensor/tensor_ext_attribute.h>
#include <vespa/vespalib/util/exceptions.h>
#include <vespa/vespalib/util/issue.h>
+#include <algorithm>
+#include <cctype>
using search::attribute::BasicType;
using search::attribute::CollectionType;
using search::attribute::Config;
+using search::attribute::DistanceMetric;
+using search::attribute::DistanceMetricUtils;
using search::fef::QueryValue;
using search::tensor::DistanceCalculator;
using search::tensor::TensorExtAttribute;
@@ -61,7 +66,7 @@ NearestNeighborFieldSearcher::NodeAndCalc::to_raw_score(double distance)
}
NearestNeighborFieldSearcher::NearestNeighborFieldSearcher(FieldIdT fid,
- search::attribute::DistanceMetric metric)
+ DistanceMetric metric)
: FieldSearcher(fid),
_metric(metric),
_attr(),
@@ -134,25 +139,20 @@ NearestNeighborFieldSearcher::onValue(const document::FieldValue& fv)
}
}
-search::attribute::DistanceMetric
+DistanceMetric
NearestNeighborFieldSearcher::distance_metric_from_string(const vespalib::string& value)
{
- using search::attribute::DistanceMetric;
// Valid string values must match the definition of DistanceMetric in
// config-model/src/main/java/com/yahoo/schema/document/Attribute.java
- if (value == "EUCLIDEAN") {
+ auto v = value;
+ std::transform(v.begin(), v.end(), v.begin(),
+ [](unsigned char c) { return std::tolower(c); });
+ try {
+ return DistanceMetricUtils::to_distance_metric(v);
+ } catch (vespalib::IllegalStateException&) {
+ vespalib::Issue::report("Distance metric '%s' is not supported. Using 'euclidean' instead", value.c_str());
return DistanceMetric::Euclidean;
- } else if (value == "ANGULAR") {
- return DistanceMetric::Angular;
- } else if (value == "GEODEGREES") {
- return DistanceMetric::GeoDegrees;
- } else if (value == "INNERPRODUCT") {
- return DistanceMetric::InnerProduct;
- } else if (value == "HAMMING") {
- return DistanceMetric::Hamming;
}
- vespalib::Issue::report("Distance metric '%s' is not supported. Using 'euclidean' instead", value.c_str());
- return DistanceMetric::Euclidean;
}
}