diff options
author | Henning Baldersheim <balder@yahoo-inc.com> | 2023-05-24 22:16:47 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-05-24 22:16:47 +0200 |
commit | 6a66fbde67c747ee6492cffa33ee2e8cfca28d97 (patch) | |
tree | 45d711bae29da900581d99f8806b3228378b9701 | |
parent | 1d445d46f6c4662d64ff77c81b068163d4077479 (diff) | |
parent | 81effa202b43da3a9c3d47a3ac2edbce40a1c478 (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.cpp | 28 |
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; } } |