mirror of
https://github.com/pgvector/pgvector.git
synced 2026-07-11 23:26:55 +08:00
Exclude zero vectors for cosine distance to be consistent with other types [skip ci]
This commit is contained in:
@@ -912,6 +912,7 @@ CREATE OPERATOR CLASS minivec_cosine_ops
|
|||||||
FOR TYPE minivec USING ivfflat AS
|
FOR TYPE minivec USING ivfflat AS
|
||||||
OPERATOR 1 <=> (minivec, minivec) FOR ORDER BY float_ops,
|
OPERATOR 1 <=> (minivec, minivec) FOR ORDER BY float_ops,
|
||||||
FUNCTION 1 cosine_distance(minivec, minivec),
|
FUNCTION 1 cosine_distance(minivec, minivec),
|
||||||
|
FUNCTION 2 l2_norm(minivec),
|
||||||
FUNCTION 3 minivec_spherical_distance(minivec, minivec),
|
FUNCTION 3 minivec_spherical_distance(minivec, minivec),
|
||||||
FUNCTION 4 l2_norm(minivec),
|
FUNCTION 4 l2_norm(minivec),
|
||||||
FUNCTION 5 ivfflat_minivec_support(internal);
|
FUNCTION 5 ivfflat_minivec_support(internal);
|
||||||
|
|||||||
@@ -71,6 +71,9 @@ IvfflatOptionalProcInfo(Relation index, uint16 procnum)
|
|||||||
Datum
|
Datum
|
||||||
IvfflatNormValue(const IvfflatTypeInfo * typeInfo, Oid collation, Datum value)
|
IvfflatNormValue(const IvfflatTypeInfo * typeInfo, Oid collation, Datum value)
|
||||||
{
|
{
|
||||||
|
if (!typeInfo->normalize)
|
||||||
|
return value;
|
||||||
|
|
||||||
return DirectFunctionCall1Coll(typeInfo->normalize, collation, value);
|
return DirectFunctionCall1Coll(typeInfo->normalize, collation, value);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -392,7 +395,8 @@ ivfflat_minivec_support(PG_FUNCTION_ARGS)
|
|||||||
{
|
{
|
||||||
static const IvfflatTypeInfo typeInfo = {
|
static const IvfflatTypeInfo typeInfo = {
|
||||||
.maxDimensions = IVFFLAT_MAX_DIM * 4,
|
.maxDimensions = IVFFLAT_MAX_DIM * 4,
|
||||||
.normalize = minivec_l2_normalize,
|
/* Do not normalize to maximize precision */
|
||||||
|
.normalize = NULL,
|
||||||
.itemSize = MinivecItemSize,
|
.itemSize = MinivecItemSize,
|
||||||
.updateCenter = MinivecUpdateCenter,
|
.updateCenter = MinivecUpdateCenter,
|
||||||
.sumCenter = MinivecSumCenter
|
.sumCenter = MinivecSumCenter
|
||||||
|
|||||||
Reference in New Issue
Block a user