子向量索引

子向量索引,即对向量的部分或子集进行索引,可有效处理大规模的高维数据。

子向量索引

  1. 创建一个具有3个维度的向量表。

    CREATE TABLE items (id bigserial PRIMARY KEY, embedding vector(3));
  2. 使用表达式索引进行子向量索引。

    CREATE INDEX ON items USING hnsw ((subvector(embedding, 1, 3)::vector(3)) vector_cosine_ops);
  3. 查询。

    • 使用余弦距离获取最近邻。

      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;