aboutsummaryrefslogtreecommitdiffstats
path: root/searchlib
diff options
context:
space:
mode:
authorArne Juul <arnej@yahooinc.com>2023-04-18 07:32:45 +0000
committerArne Juul <arnej@yahooinc.com>2023-04-20 12:54:39 +0000
commitbbf7a4ad12383de93f8d873f240dd915ed67f3f8 (patch)
treec1ebd1aada8c95df5aac8b3fe892c8f58350b806 /searchlib
parent687be0d6e22caca23708de1493fb483069bbab0a (diff)
add two names for distance metrics
Diffstat (limited to 'searchlib')
-rw-r--r--searchlib/src/tests/attribute/attribute_header/attribute_header_test.cpp1
-rw-r--r--searchlib/src/vespa/searchcommon/attribute/distance_metric.h2
-rw-r--r--searchlib/src/vespa/searchlib/attribute/attribute_header.cpp8
-rw-r--r--searchlib/src/vespa/searchlib/attribute/configconverter.cpp6
-rw-r--r--searchlib/src/vespa/searchlib/tensor/distance_function_factory.cpp1
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>>();