73 lines
2.0 KiB
SQL
73 lines
2.0 KiB
SQL
create schema v;
|
|
|
|
create table v.items(
|
|
id serial primary key,
|
|
embedding vector(3),
|
|
half_embedding halfvec(3),
|
|
bit_embedding bit(3),
|
|
sparse_embedding sparsevec(3)
|
|
);
|
|
|
|
-- vector ops
|
|
create index on v.items using hnsw (embedding vector_l2_ops);
|
|
create index on v.items using hnsw (embedding vector_cosine_ops);
|
|
create index on v.items using hnsw (embedding vector_l1_ops);
|
|
create index on v.items using ivfflat (embedding vector_l2_ops);
|
|
create index on v.items using ivfflat (embedding vector_cosine_ops);
|
|
|
|
-- halfvec ops
|
|
create index on v.items using hnsw (half_embedding halfvec_l2_ops);
|
|
create index on v.items using hnsw (half_embedding halfvec_cosine_ops);
|
|
create index on v.items using hnsw (half_embedding halfvec_l1_ops);
|
|
create index on v.items using ivfflat (half_embedding halfvec_l2_ops);
|
|
create index on v.items using ivfflat (half_embedding halfvec_cosine_ops);
|
|
|
|
-- sparsevec
|
|
create index on v.items using hnsw (sparse_embedding sparsevec_l2_ops);
|
|
create index on v.items using hnsw (sparse_embedding sparsevec_cosine_ops);
|
|
create index on v.items using hnsw (sparse_embedding sparsevec_l1_ops);
|
|
|
|
-- bit ops
|
|
create index on v.items using hnsw (bit_embedding bit_hamming_ops);
|
|
create index on v.items using ivfflat (bit_embedding bit_hamming_ops);
|
|
|
|
-- Populate some records
|
|
insert into v.items(
|
|
embedding,
|
|
half_embedding,
|
|
bit_embedding,
|
|
sparse_embedding
|
|
)
|
|
values
|
|
('[1,2,3]', '[1,2,3]', '101', '{1:4}/3'),
|
|
('[2,3,4]', '[2,3,4]', '010', '{1:7,3:0}/3');
|
|
|
|
-- Test op types
|
|
select
|
|
*
|
|
from
|
|
v.items
|
|
order by
|
|
embedding <-> '[2,3,5]',
|
|
embedding <=> '[2,3,5]',
|
|
embedding <+> '[2,3,5]',
|
|
embedding <#> '[2,3,5]',
|
|
half_embedding <-> '[2,3,5]',
|
|
half_embedding <=> '[2,3,5]',
|
|
half_embedding <+> '[2,3,5]',
|
|
half_embedding <#> '[2,3,5]',
|
|
sparse_embedding <-> '{2:4,3:1}/3',
|
|
sparse_embedding <=> '{2:4,3:1}/3',
|
|
sparse_embedding <+> '{2:4,3:1}/3',
|
|
sparse_embedding <#> '{2:4,3:1}/3',
|
|
bit_embedding <~> '011';
|
|
|
|
select
|
|
avg(embedding),
|
|
avg(half_embedding)
|
|
from
|
|
v.items;
|
|
|
|
-- Cleanup
|
|
drop schema v cascade;
|