diff options
author | Arne Juul <arnej@yahooinc.com> | 2023-04-18 07:32:45 +0000 |
---|---|---|
committer | Arne Juul <arnej@yahooinc.com> | 2023-04-20 12:54:39 +0000 |
commit | bbf7a4ad12383de93f8d873f240dd915ed67f3f8 (patch) | |
tree | c1ebd1aada8c95df5aac8b3fe892c8f58350b806 /searchlib | |
parent | 687be0d6e22caca23708de1493fb483069bbab0a (diff) |
add two names for distance metrics
Diffstat (limited to 'searchlib')
5 files changed, 17 insertions, 1 deletions
diff --git a/searchlib/src/tests/attribute/attribute_header/attribute_header_test.cpp b/searchlib/src/tests/attribute/attribute_header/attribute_header_test.cpp index 16a04a746f3..2a0b973fea6 100644 --- a/searchlib/src/tests/attribute/attribute_header/attribute_header_test.cpp +++ b/searchlib/src/tests/attribute/attribute_header/attribute_header_test.cpp @@ -73,6 +73,7 @@ TEST(AttributeHeaderTest, can_be_added_to_and_extracted_from_generic_header) verify_roundtrip_serialization(HnswIPO({16, 100, DistanceMetric::Angular})); verify_roundtrip_serialization(HnswIPO({16, 100, DistanceMetric::GeoDegrees})); verify_roundtrip_serialization(HnswIPO({16, 100, DistanceMetric::InnerProduct})); + verify_roundtrip_serialization(HnswIPO({16, 100, DistanceMetric::PrenormalizedAngular})); verify_roundtrip_serialization(HnswIPO({16, 100, DistanceMetric::Hamming})); verify_roundtrip_serialization(HnswIPO()); } diff --git a/searchlib/src/vespa/searchcommon/attribute/distance_metric.h b/searchlib/src/vespa/searchcommon/attribute/distance_metric.h index 26efa30bba4..70e967046d8 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 }; +enum class DistanceMetric { Euclidean, Angular, GeoDegrees, InnerProduct, Hamming, PrenormalizedAngular, MaximumInnerProduct }; } diff --git a/searchlib/src/vespa/searchlib/attribute/attribute_header.cpp b/searchlib/src/vespa/searchlib/attribute/attribute_header.cpp index e40717e6375..d67999f9315 100644 --- a/searchlib/src/vespa/searchlib/attribute/attribute_header.cpp +++ b/searchlib/src/vespa/searchlib/attribute/attribute_header.cpp @@ -28,6 +28,8 @@ const vespalib::string euclidean = "euclidean"; 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 maximum_inner_product = "maximum_inner_product"; const vespalib::string hamming = "hamming"; const vespalib::string doc_id_limit_tag = "docIdLimit"; const vespalib::string enumerated_tag = "enumerated"; @@ -101,6 +103,8 @@ to_string(DistanceMetric metric) case DistanceMetric::GeoDegrees: return geodegrees; case DistanceMetric::InnerProduct: return innerproduct; case DistanceMetric::Hamming: return hamming; + case DistanceMetric::PrenormalizedAngular: return prenormalized_angular; + case DistanceMetric::MaximumInnerProduct: return maximum_inner_product; } throw vespalib::IllegalArgumentException("Unknown distance metric " + std::to_string(static_cast<int>(metric))); } @@ -116,6 +120,10 @@ to_distance_metric(const vespalib::string& metric) return DistanceMetric::GeoDegrees; } else if (metric == innerproduct) { return DistanceMetric::InnerProduct; + } else if (metric == prenormalized_angular) { + return DistanceMetric::PrenormalizedAngular; + } else if (metric == maximum_inner_product) { + return DistanceMetric::MaximumInnerProduct; } 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 a799abb34c7..76a243c3c89 100644 --- a/searchlib/src/vespa/searchlib/attribute/configconverter.cpp +++ b/searchlib/src/vespa/searchlib/attribute/configconverter.cpp @@ -134,6 +134,12 @@ ConfigConverter::convert(const AttributesConfig::Attribute & cfg) case CfgDm::HAMMING: dm = DistanceMetric::Hamming; break; + case CfgDm::PRENORMALIZED_ANGULAR: + dm = DistanceMetric::PrenormalizedAngular; + break; + case CfgDm::MAXIMUM_INNER_PRODUCT: + dm = DistanceMetric::MaximumInnerProduct; + break; } retval.set_distance_metric(dm); if (cfg.index.hnsw.enabled) { diff --git a/searchlib/src/vespa/searchlib/tensor/distance_function_factory.cpp b/searchlib/src/vespa/searchlib/tensor/distance_function_factory.cpp index f96715bcf60..17e066571ea 100644 --- a/searchlib/src/vespa/searchlib/tensor/distance_function_factory.cpp +++ b/searchlib/src/vespa/searchlib/tensor/distance_function_factory.cpp @@ -34,6 +34,7 @@ make_distance_function(DistanceMetric variant, CellType cell_type) } case DistanceMetric::GeoDegrees: return std::make_unique<GeoDegreesDistance>(CellType::DOUBLE); + case DistanceMetric::PrenormalizedAngular: case DistanceMetric::InnerProduct: switch (cell_type) { case CellType::FLOAT: return std::make_unique<InnerProductDistanceHW<float>>(); |