mirror of
https://github.com/pgvector/pgvector.git
synced 2026-07-05 12:10:55 +08:00
Skip duplicate center check for bit [skip ci]
This commit is contained in:
@@ -707,21 +707,22 @@ CheckCenters(Relation index, VectorArray centers, IvfflatType type)
|
|||||||
elog(ERROR, "Unsupported type");
|
elog(ERROR, "Unsupported type");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Ensure no duplicate centers */
|
if (type != IVFFLAT_TYPE_BIT)
|
||||||
/* Fine to sort in-place */
|
|
||||||
if (type == IVFFLAT_TYPE_VECTOR)
|
|
||||||
qsort(centers->items, centers->length, centers->itemsize, CompareVectors);
|
|
||||||
else if (type == IVFFLAT_TYPE_HALFVEC)
|
|
||||||
qsort(centers->items, centers->length, centers->itemsize, CompareHalfVectors);
|
|
||||||
else if (type == IVFFLAT_TYPE_BIT)
|
|
||||||
qsort(centers->items, centers->length, centers->itemsize, CompareBitVectors);
|
|
||||||
else
|
|
||||||
elog(ERROR, "Unsupported type");
|
|
||||||
|
|
||||||
for (int i = 1; i < centers->length; i++)
|
|
||||||
{
|
{
|
||||||
if (datumIsEqual(PointerGetDatum(VectorArrayGet(centers, i)), PointerGetDatum(VectorArrayGet(centers, i - 1)), false, -1))
|
/* Ensure no duplicate centers */
|
||||||
elog(ERROR, "Duplicate centers detected. Please report a bug.");
|
/* Fine to sort in-place */
|
||||||
|
if (type == IVFFLAT_TYPE_VECTOR)
|
||||||
|
qsort(centers->items, centers->length, centers->itemsize, CompareVectors);
|
||||||
|
else if (type == IVFFLAT_TYPE_HALFVEC)
|
||||||
|
qsort(centers->items, centers->length, centers->itemsize, CompareHalfVectors);
|
||||||
|
else
|
||||||
|
elog(ERROR, "Unsupported type");
|
||||||
|
|
||||||
|
for (int i = 1; i < centers->length; i++)
|
||||||
|
{
|
||||||
|
if (datumIsEqual(PointerGetDatum(VectorArrayGet(centers, i)), PointerGetDatum(VectorArrayGet(centers, i - 1)), false, -1))
|
||||||
|
elog(ERROR, "Duplicate centers detected. Please report a bug.");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Ensure no zero vectors for cosine distance */
|
/* Ensure no zero vectors for cosine distance */
|
||||||
|
|||||||
@@ -29,4 +29,8 @@ DETAIL: This will cause low recall.
|
|||||||
HINT: Drop the index until the table has more data.
|
HINT: Drop the index until the table has more data.
|
||||||
CREATE INDEX ON t USING ivfflat ((val::bit(64001)) bit_hamming_ops) WITH (lists = 1);
|
CREATE INDEX ON t USING ivfflat ((val::bit(64001)) bit_hamming_ops) WITH (lists = 1);
|
||||||
ERROR: column cannot have more than 64000 dimensions for ivfflat index
|
ERROR: column cannot have more than 64000 dimensions for ivfflat index
|
||||||
|
CREATE INDEX ON t USING ivfflat ((val::bit(2)) bit_hamming_ops) WITH (lists = 5);
|
||||||
|
NOTICE: ivfflat index created with little data
|
||||||
|
DETAIL: This will cause low recall.
|
||||||
|
HINT: Drop the index until the table has more data.
|
||||||
DROP TABLE t;
|
DROP TABLE t;
|
||||||
|
|||||||
@@ -16,4 +16,5 @@ CREATE TABLE t (val varbit(3));
|
|||||||
CREATE INDEX ON t USING ivfflat (val bit_hamming_ops) WITH (lists = 1);
|
CREATE INDEX ON t USING ivfflat (val bit_hamming_ops) WITH (lists = 1);
|
||||||
CREATE INDEX ON t USING ivfflat ((val::bit(3)) bit_hamming_ops) WITH (lists = 1);
|
CREATE INDEX ON t USING ivfflat ((val::bit(3)) bit_hamming_ops) WITH (lists = 1);
|
||||||
CREATE INDEX ON t USING ivfflat ((val::bit(64001)) bit_hamming_ops) WITH (lists = 1);
|
CREATE INDEX ON t USING ivfflat ((val::bit(64001)) bit_hamming_ops) WITH (lists = 1);
|
||||||
|
CREATE INDEX ON t USING ivfflat ((val::bit(2)) bit_hamming_ops) WITH (lists = 5);
|
||||||
DROP TABLE t;
|
DROP TABLE t;
|
||||||
|
|||||||
Reference in New Issue
Block a user