summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorArne Juul <arnej@yahooinc.com>2023-04-27 13:31:42 +0000
committerArne Juul <arnej@yahooinc.com>2023-04-28 09:15:42 +0000
commitb0235cd1042315a1cb6ffc97fc0644e269d5931f (patch)
tree7fe8af834267e63ff5a84686711a19053ac9a7c5
parent4b33a265e217f3e242b0d32c8e0a720fc33352c4 (diff)
add enum
-rw-r--r--searchlib/src/vespa/searchcommon/attribute/distance_metric.h2
-rw-r--r--searchlib/src/vespa/searchlib/attribute/attribute_header.cpp6
-rw-r--r--searchlib/src/vespa/searchlib/attribute/configconverter.cpp4
-rw-r--r--searchlib/src/vespa/searchlib/tensor/distance_function_factory.cpp7
-rw-r--r--searchlib/src/vespa/searchlib/tensor/mips_distance_transform.cpp2
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();
}
}