子向量索引,即对向量的部分或子集进行索引,可有效处理大规模的高维数据。
子向量索引
创建一个具有3个维度的向量表。
CREATE TABLE items (id bigserial PRIMARY KEY, embedding vector(3));
使用表达式索引进行子向量索引。
CREATE INDEX ON items USING hnsw ((subvector(embedding, 1, 3)::vector(3)) vector_cosine_ops);
查询。
使用余弦距离获取最近邻。
SELECT * FROM items ORDER BY subvector(embedding, 1, 3)::vector(3) <=> subvector('[1,2,3,4,5]'::vector, 1, 3) LIMIT 5;
通过完整向量重新排序以提高召回率。
SELECT * FROM ( SELECT * FROM items ORDER BY subvector(embedding, 1, 3)::vector(3) <=> subvector('[1,2,3,4,5]'::vector, 1, 3) LIMIT 20 ) ORDER BY embedding <=> '[1,2,3,4,5]' LIMIT 5;
该文章对您有帮助吗?