mirror of
https://github.com/pgvector/pgvector.git
synced 2026-07-01 02:02:10 +08:00
Added sparsevec type
This commit is contained in:
13
test/sql/hnsw_sparsevec_cosine.sql
Normal file
13
test/sql/hnsw_sparsevec_cosine.sql
Normal file
@@ -0,0 +1,13 @@
|
||||
SET enable_seqscan = off;
|
||||
|
||||
CREATE TABLE t (val sparsevec(3));
|
||||
INSERT INTO t (val) VALUES ('{}/3'), ('{0:1,1:2,2:3}/3'), ('{0:1,1:1,2:1}/3'), (NULL);
|
||||
CREATE INDEX ON t USING hnsw (val sparsevec_cosine_ops);
|
||||
|
||||
INSERT INTO t (val) VALUES ('{0:1,1:2,2:4}/3');
|
||||
|
||||
SELECT * FROM t ORDER BY val <=> '{0:3,1:3,2:3}/3';
|
||||
SELECT COUNT(*) FROM (SELECT * FROM t ORDER BY val <=> '{}/3') t2;
|
||||
SELECT COUNT(*) FROM (SELECT * FROM t ORDER BY val <=> (SELECT NULL::sparsevec)) t2;
|
||||
|
||||
DROP TABLE t;
|
||||
12
test/sql/hnsw_sparsevec_ip.sql
Normal file
12
test/sql/hnsw_sparsevec_ip.sql
Normal file
@@ -0,0 +1,12 @@
|
||||
SET enable_seqscan = off;
|
||||
|
||||
CREATE TABLE t (val sparsevec(3));
|
||||
INSERT INTO t (val) VALUES ('{}/3'), ('{0:1,1:2,2:3}/3'), ('{0:1,1:1,2:1}/3'), (NULL);
|
||||
CREATE INDEX ON t USING hnsw (val sparsevec_ip_ops);
|
||||
|
||||
INSERT INTO t (val) VALUES ('{0:1,1:2,2:4}/3');
|
||||
|
||||
SELECT * FROM t ORDER BY val <#> '{0:3,1:3,2:3}/3';
|
||||
SELECT COUNT(*) FROM (SELECT * FROM t ORDER BY val <#> (SELECT NULL::sparsevec)) t2;
|
||||
|
||||
DROP TABLE t;
|
||||
25
test/sql/hnsw_sparsevec_l2.sql
Normal file
25
test/sql/hnsw_sparsevec_l2.sql
Normal file
@@ -0,0 +1,25 @@
|
||||
SET enable_seqscan = off;
|
||||
|
||||
CREATE TABLE t (val sparsevec(3));
|
||||
INSERT INTO t (val) VALUES ('{}/3'), ('{0:1,1:2,2:3}/3'), ('{0:1,1:1,2:1}/3'), (NULL);
|
||||
CREATE INDEX ON t USING hnsw (val sparsevec_l2_ops);
|
||||
|
||||
INSERT INTO t (val) VALUES ('{0:1,1:2,2:4}/3');
|
||||
|
||||
SELECT * FROM t ORDER BY val <-> '{0:3,1:3,2:3}/3';
|
||||
SELECT COUNT(*) FROM (SELECT * FROM t ORDER BY val <-> (SELECT NULL::sparsevec)) t2;
|
||||
SELECT COUNT(*) FROM t;
|
||||
|
||||
TRUNCATE t;
|
||||
SELECT * FROM t ORDER BY val <-> '{0:3,1:3,2:3}/3';
|
||||
|
||||
DROP TABLE t;
|
||||
|
||||
-- TODO move
|
||||
CREATE TABLE t (val sparsevec(1001));
|
||||
INSERT INTO t (val) VALUES (array_fill(1, ARRAY[1001])::vector::sparsevec);
|
||||
CREATE INDEX ON t USING hnsw (val sparsevec_l2_ops);
|
||||
TRUNCATE t;
|
||||
CREATE INDEX ON t USING hnsw (val sparsevec_l2_ops);
|
||||
INSERT INTO t (val) VALUES (array_fill(1, ARRAY[1001])::vector::sparsevec);
|
||||
DROP TABLE t;
|
||||
13
test/sql/sparsevec_functions.sql
Normal file
13
test/sql/sparsevec_functions.sql
Normal file
@@ -0,0 +1,13 @@
|
||||
SELECT l2_distance('{}/2'::sparsevec, '{0:3,1:4}/2');
|
||||
SELECT l2_distance('{}/2'::sparsevec, '{1:1}/2');
|
||||
SELECT '{}/2'::sparsevec <-> '{0:3,1:4}/2';
|
||||
|
||||
SELECT inner_product('{0:1,1:2}/2'::sparsevec, '{0:2,1:4}/2');
|
||||
SELECT sparsevec_negative_inner_product('{0:1,1:2}/2', '{0:2,1:4}/2');
|
||||
|
||||
SELECT cosine_distance('{0:1,1:2}/2'::sparsevec, '{0:2,1:4}/2');
|
||||
SELECT cosine_distance('{0:1,1:2}/2'::sparsevec, '{}/2');
|
||||
SELECT cosine_distance('{0:1,1:1}/2'::sparsevec, '{0:-1,1:-1}/2');
|
||||
SELECT cosine_distance('{0:1}/2'::sparsevec, '{1:2}/2');
|
||||
SELECT cosine_distance('{}/1'::sparsevec, '{}/1');
|
||||
SELECT cosine_distance('{0:1}/2'::sparsevec, '{0:1}/3');
|
||||
19
test/sql/sparsevec_input.sql
Normal file
19
test/sql/sparsevec_input.sql
Normal file
@@ -0,0 +1,19 @@
|
||||
SELECT '{0:1.5,2:3.5}/5'::sparsevec;
|
||||
SELECT '{0:1.5,2:3.5}/5'::sparsevec::vector;
|
||||
SELECT '{0:1.5,2:3.5}/5'::sparsevec::vector(5);
|
||||
SELECT '{0:1.5,2:3.5}/5'::sparsevec::vector(4);
|
||||
SELECT '[0,1.5,0,3.5,0]'::vector::sparsevec;
|
||||
|
||||
SELECT '{0:0,1:1,2:0}/3'::sparsevec;
|
||||
|
||||
SELECT '{1:1,0:1}/2'::sparsevec;
|
||||
|
||||
SELECT '{}/5'::sparsevec;
|
||||
SELECT '{}/-1'::sparsevec;
|
||||
SELECT '{}/100001'::sparsevec;
|
||||
SELECT '{}/16001'::sparsevec::vector;
|
||||
|
||||
SELECT '{-1:1}/1'::sparsevec;
|
||||
SELECT '{1:1}/1'::sparsevec;
|
||||
|
||||
SELECT '{}/1'::sparsevec(2);
|
||||
Reference in New Issue
Block a user