diff --git a/sql/vector.sql b/sql/vector.sql index b31d02d..8b4e192 100644 --- a/sql/vector.sql +++ b/sql/vector.sql @@ -932,7 +932,7 @@ CREATE OPERATOR CLASS minivec_ip_ops CREATE OPERATOR CLASS minivec_cosine_ops FOR TYPE minivec USING hnsw AS OPERATOR 1 <=> (minivec, minivec) FOR ORDER BY float_ops, - FUNCTION 1 minivec_negative_inner_product(minivec, minivec), + FUNCTION 1 cosine_distance(minivec, minivec), FUNCTION 2 l2_norm(minivec), FUNCTION 3 hnsw_minivec_support(internal); diff --git a/src/hnswutils.c b/src/hnswutils.c index 0b465ee..e70d0b6 100644 --- a/src/hnswutils.c +++ b/src/hnswutils.c @@ -159,6 +159,9 @@ HnswOptionalProcInfo(Relation index, uint16 procnum) Datum HnswNormValue(const HnswTypeInfo * typeInfo, Oid collation, Datum value) { + if (!typeInfo->normalize) + return value; + return DirectFunctionCall1Coll(typeInfo->normalize, collation, value); } @@ -1382,7 +1385,8 @@ hnsw_minivec_support(PG_FUNCTION_ARGS) { static const HnswTypeInfo typeInfo = { .maxDimensions = HNSW_MAX_DIM * 4, - .normalize = minivec_l2_normalize, + /* Do not normalize to maximize precision */ + .normalize = NULL, .checkValue = NULL }; diff --git a/test/t/039_hnsw_minivec_build_recall.pl b/test/t/039_hnsw_minivec_build_recall.pl index ed1a642..36b8a4f 100644 --- a/test/t/039_hnsw_minivec_build_recall.pl +++ b/test/t/039_hnsw_minivec_build_recall.pl @@ -95,10 +95,6 @@ for my $i (0 .. $#operators) # Test approximate results my $min = 0.98; - if ($operator eq "<=>") - { - $min = 0.60; - } test_recall($min, $operator); $node->safe_psql("postgres", "DROP INDEX idx;"); diff --git a/test/t/040_hnsw_minivec_insert_recall.pl b/test/t/040_hnsw_minivec_insert_recall.pl index 13fb856..30641b5 100644 --- a/test/t/040_hnsw_minivec_insert_recall.pl +++ b/test/t/040_hnsw_minivec_insert_recall.pl @@ -104,10 +104,6 @@ for my $i (0 .. $#operators) # Test approximate results my $min = 0.98; - if ($operator eq "<=>") - { - $min = 0.60; - } test_recall($min, $operator); $node->safe_psql("postgres", "DROP INDEX idx;");