diff options
author | Arne Juul <arnej@yahooinc.com> | 2023-04-27 13:31:42 +0000 |
---|---|---|
committer | Arne Juul <arnej@yahooinc.com> | 2023-04-28 09:15:42 +0000 |
commit | b0235cd1042315a1cb6ffc97fc0644e269d5931f (patch) | |
tree | 7fe8af834267e63ff5a84686711a19053ac9a7c5 | |
parent | 4b33a265e217f3e242b0d32c8e0a720fc33352c4 (diff) |
add enum
5 files changed, 18 insertions, 3 deletions
diff --git a/searchlib/src/vespa/searchcommon/attribute/distance_metric.h b/searchlib/src/vespa/searchcommon/attribute/distance_metric.h index 5b747d2016d..c157f6abb28 100644 --- a/searchlib/src/vespa/searchcommon/attribute/distance_metric.h +++ b/searchlib/src/vespa/searchcommon/attribute/distance_metric.h @@ -4,6 +4,6 @@ namespace search::attribute { -enum class DistanceMetric { Euclidean, Angular, GeoDegrees, InnerProduct, Hamming, PrenormalizedAngular }; +enum class DistanceMetric { Euclidean, Angular, GeoDegrees, InnerProduct, Hamming, PrenormalizedAngular, TransformedMips }; } diff --git a/searchlib/src/vespa/searchlib/attribute/attribute_header.cpp b/searchlib/src/vespa/searchlib/attribute/attribute_header.cpp index b9b3c63a0c3..0edab90f089 100644 --- a/searchlib/src/vespa/searchlib/attribute/attribute_header.cpp +++ b/searchlib/src/vespa/searchlib/attribute/attribute_header.cpp @@ -29,6 +29,7 @@ const vespalib::string angular = "angular"; const vespalib::string geodegrees = "geodegrees"; const vespalib::string innerproduct = "innerproduct"; const vespalib::string prenormalized_angular = "prenormalized_angular"; +const vespalib::string transformed_mips = "transformed_mips"; const vespalib::string hamming = "hamming"; const vespalib::string doc_id_limit_tag = "docIdLimit"; const vespalib::string enumerated_tag = "enumerated"; @@ -103,6 +104,7 @@ to_string(DistanceMetric metric) case DistanceMetric::InnerProduct: return innerproduct; case DistanceMetric::Hamming: return hamming; case DistanceMetric::PrenormalizedAngular: return prenormalized_angular; + case DistanceMetric::TransformedMips: return transformed_mips; } throw vespalib::IllegalArgumentException("Unknown distance metric " + std::to_string(static_cast<int>(metric))); } @@ -119,7 +121,9 @@ to_distance_metric(const vespalib::string& metric) } else if (metric == innerproduct) { return DistanceMetric::InnerProduct; } else if (metric == prenormalized_angular) { - return DistanceMetric::PrenormalizedAngular; + return DistanceMetric::PrenormalizedAngular; + } else if (metric == transformed_mips) { + return DistanceMetric::TransformedMips; } else if (metric == hamming) { return DistanceMetric::Hamming; } else { diff --git a/searchlib/src/vespa/searchlib/attribute/configconverter.cpp b/searchlib/src/vespa/searchlib/attribute/configconverter.cpp index 31a0b2f2733..365c092ba3a 100644 --- a/searchlib/src/vespa/searchlib/attribute/configconverter.cpp +++ b/searchlib/src/vespa/searchlib/attribute/configconverter.cpp @@ -136,6 +136,10 @@ ConfigConverter::convert(const AttributesConfig::Attribute & cfg) break; case CfgDm::PRENORMALIZED_ANGULAR: dm = DistanceMetric::PrenormalizedAngular; + /* + case CfgDm::TRANFORMED_MIPS: + dm = DistanceMetric::TransformedMips; + */ break; } retval.set_distance_metric(dm); diff --git a/searchlib/src/vespa/searchlib/tensor/distance_function_factory.cpp b/searchlib/src/vespa/searchlib/tensor/distance_function_factory.cpp index bec0f430a51..a338bf85e43 100644 --- a/searchlib/src/vespa/searchlib/tensor/distance_function_factory.cpp +++ b/searchlib/src/vespa/searchlib/tensor/distance_function_factory.cpp @@ -2,6 +2,7 @@ #include "distance_function_factory.h" #include "distance_functions.h" +#include "mips_distance_transform.h" #include <vespa/vespalib/util/typify.h> #include <vespa/vespalib/util/array.h> #include <vespa/vespalib/util/arrayref.h> @@ -38,6 +39,12 @@ make_distance_function_factory(search::attribute::DistanceMetric variant, case CellType::DOUBLE: return std::make_unique<PrenormalizedAngularDistanceFunctionFactory<double>>(); default: return std::make_unique<PrenormalizedAngularDistanceFunctionFactory<float>>(); } + case DistanceMetric::TransformedMips: + switch (cell_type) { + case CellType::DOUBLE: return std::make_unique<MipsDistanceFunctionFactory<double>>(); + case CellType::INT8: return std::make_unique<MipsDistanceFunctionFactory<vespalib::eval::Int8Float>>(); + default: return std::make_unique<MipsDistanceFunctionFactory<float>>(); + } case DistanceMetric::GeoDegrees: return std::make_unique<GeoDistanceFunctionFactory>(); case DistanceMetric::Hamming: diff --git a/searchlib/src/vespa/searchlib/tensor/mips_distance_transform.cpp b/searchlib/src/vespa/searchlib/tensor/mips_distance_transform.cpp index fd2295bef76..30e1b7fc903 100644 --- a/searchlib/src/vespa/searchlib/tensor/mips_distance_transform.cpp +++ b/searchlib/src/vespa/searchlib/tensor/mips_distance_transform.cpp @@ -36,7 +36,7 @@ public: _max_sq_norm = sq_norm_store.get_max(lhs_sq_norm); _lhs_extra_dim = std::sqrt(_max_sq_norm - lhs_sq_norm); } else { - _max_sq_norm = sq_norm_store.get_max(); + _max_sq_norm = sq_norm_store.get_max(); } } |