Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 5bab9d8

Browse files
oliricedarora
authored andcommitted
add pgvector tests
1 parent 3c208ac commit 5bab9d8

File tree

2 files changed

+162
-0
lines changed

2 files changed

+162
-0
lines changed

nix/tests/expected/pgvector.out

+90
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
create schema v;
2+
create table v.items(
3+
id serial primary key,
4+
embedding vector(3),
5+
half_embedding halfvec(3),
6+
bit_embedding bit(3),
7+
sparse_embedding sparsevec(3)
8+
);
9+
-- vector ops
10+
create index on v.items using hnsw (embedding vector_l2_ops);
11+
create index on v.items using hnsw (embedding vector_cosine_ops);
12+
create index on v.items using hnsw (embedding vector_l1_ops);
13+
create index on v.items using ivfflat (embedding vector_l2_ops);
14+
NOTICE: ivfflat index created with little data
15+
DETAIL: This will cause low recall.
16+
HINT: Drop the index until the table has more data.
17+
create index on v.items using ivfflat (embedding vector_cosine_ops);
18+
NOTICE: ivfflat index created with little data
19+
DETAIL: This will cause low recall.
20+
HINT: Drop the index until the table has more data.
21+
-- halfvec ops
22+
create index on v.items using hnsw (half_embedding halfvec_l2_ops);
23+
create index on v.items using hnsw (half_embedding halfvec_cosine_ops);
24+
create index on v.items using hnsw (half_embedding halfvec_l1_ops);
25+
create index on v.items using ivfflat (half_embedding halfvec_l2_ops);
26+
NOTICE: ivfflat index created with little data
27+
DETAIL: This will cause low recall.
28+
HINT: Drop the index until the table has more data.
29+
create index on v.items using ivfflat (half_embedding halfvec_cosine_ops);
30+
NOTICE: ivfflat index created with little data
31+
DETAIL: This will cause low recall.
32+
HINT: Drop the index until the table has more data.
33+
-- sparsevec
34+
create index on v.items using hnsw (sparse_embedding sparsevec_l2_ops);
35+
create index on v.items using hnsw (sparse_embedding sparsevec_cosine_ops);
36+
create index on v.items using hnsw (sparse_embedding sparsevec_l1_ops);
37+
-- bit ops
38+
create index on v.items using hnsw (bit_embedding bit_hamming_ops);
39+
create index on v.items using ivfflat (bit_embedding bit_hamming_ops);
40+
NOTICE: ivfflat index created with little data
41+
DETAIL: This will cause low recall.
42+
HINT: Drop the index until the table has more data.
43+
-- Populate some records
44+
insert into v.items(
45+
embedding,
46+
half_embedding,
47+
bit_embedding,
48+
sparse_embedding
49+
)
50+
values
51+
('[1,2,3]', '[1,2,3]', '101', '{1:4}/3'),
52+
('[2,3,4]', '[2,3,4]', '010', '{1:7,3:0}/3');
53+
-- Test op types
54+
select
55+
*
56+
from
57+
v.items
58+
order by
59+
embedding <-> '[2,3,5]',
60+
embedding <=> '[2,3,5]',
61+
embedding <+> '[2,3,5]',
62+
embedding <#> '[2,3,5]',
63+
half_embedding <-> '[2,3,5]',
64+
half_embedding <=> '[2,3,5]',
65+
half_embedding <+> '[2,3,5]',
66+
half_embedding <#> '[2,3,5]',
67+
sparse_embedding <-> '{2:4,3:1}/3',
68+
sparse_embedding <=> '{2:4,3:1}/3',
69+
sparse_embedding <+> '{2:4,3:1}/3',
70+
sparse_embedding <#> '{2:4,3:1}/3',
71+
bit_embedding <~> '011';
72+
id | embedding | half_embedding | bit_embedding | sparse_embedding
73+
----+-----------+----------------+---------------+------------------
74+
2 | [2,3,4] | [2,3,4] | 010 | {1:7}/3
75+
1 | [1,2,3] | [1,2,3] | 101 | {1:4}/3
76+
(2 rows)
77+
78+
select
79+
avg(embedding),
80+
avg(half_embedding)
81+
from
82+
v.items;
83+
avg | avg
84+
---------------+---------------
85+
[1.5,2.5,3.5] | [1.5,2.5,3.5]
86+
(1 row)
87+
88+
-- Cleanup
89+
drop schema v cascade;
90+
NOTICE: drop cascades to table v.items

nix/tests/sql/pgvector.sql

+72
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
create schema v;
2+
3+
create table v.items(
4+
id serial primary key,
5+
embedding vector(3),
6+
half_embedding halfvec(3),
7+
bit_embedding bit(3),
8+
sparse_embedding sparsevec(3)
9+
);
10+
11+
-- vector ops
12+
create index on v.items using hnsw (embedding vector_l2_ops);
13+
create index on v.items using hnsw (embedding vector_cosine_ops);
14+
create index on v.items using hnsw (embedding vector_l1_ops);
15+
create index on v.items using ivfflat (embedding vector_l2_ops);
16+
create index on v.items using ivfflat (embedding vector_cosine_ops);
17+
18+
-- halfvec ops
19+
create index on v.items using hnsw (half_embedding halfvec_l2_ops);
20+
create index on v.items using hnsw (half_embedding halfvec_cosine_ops);
21+
create index on v.items using hnsw (half_embedding halfvec_l1_ops);
22+
create index on v.items using ivfflat (half_embedding halfvec_l2_ops);
23+
create index on v.items using ivfflat (half_embedding halfvec_cosine_ops);
24+
25+
-- sparsevec
26+
create index on v.items using hnsw (sparse_embedding sparsevec_l2_ops);
27+
create index on v.items using hnsw (sparse_embedding sparsevec_cosine_ops);
28+
create index on v.items using hnsw (sparse_embedding sparsevec_l1_ops);
29+
30+
-- bit ops
31+
create index on v.items using hnsw (bit_embedding bit_hamming_ops);
32+
create index on v.items using ivfflat (bit_embedding bit_hamming_ops);
33+
34+
-- Populate some records
35+
insert into v.items(
36+
embedding,
37+
half_embedding,
38+
bit_embedding,
39+
sparse_embedding
40+
)
41+
values
42+
('[1,2,3]', '[1,2,3]', '101', '{1:4}/3'),
43+
('[2,3,4]', '[2,3,4]', '010', '{1:7,3:0}/3');
44+
45+
-- Test op types
46+
select
47+
*
48+
from
49+
v.items
50+
order by
51+
embedding <-> '[2,3,5]',
52+
embedding <=> '[2,3,5]',
53+
embedding <+> '[2,3,5]',
54+
embedding <#> '[2,3,5]',
55+
half_embedding <-> '[2,3,5]',
56+
half_embedding <=> '[2,3,5]',
57+
half_embedding <+> '[2,3,5]',
58+
half_embedding <#> '[2,3,5]',
59+
sparse_embedding <-> '{2:4,3:1}/3',
60+
sparse_embedding <=> '{2:4,3:1}/3',
61+
sparse_embedding <+> '{2:4,3:1}/3',
62+
sparse_embedding <#> '{2:4,3:1}/3',
63+
bit_embedding <~> '011';
64+
65+
select
66+
avg(embedding),
67+
avg(half_embedding)
68+
from
69+
v.items;
70+
71+
-- Cleanup
72+
drop schema v cascade;

0 commit comments

Comments
 (0)