2-PostgreSQL docker compose 安装教程-Pgvector

06-01 1453阅读

2-PostgreSQL docker compose 安装教程-Pgvector

pgvector介绍

Postgres: 开源的向量相似度搜索

存储你的向量数据与你其余的数据一起。支持:

  • 精确和近似最近邻搜索
  • 单精度,半精度,二进制,以及稀疏向量
  • L2 距离, 内积, 余弦距离, L1 距离, 哈明距离, 和杰卡德距离
  • 任何带有 Postgres 客户端的语言
  • 加上 ACID 兼容性、即时恢复、JOIN 操作,以及 Postgres 的其他所有出色功能

    快速安装PostgreSQL和pgvector

    https://www.postgresql.org/

    https://github.com/pgvector/pgvector

    1、创建Dockerfile文件,代码如下:

    # 使用 PostgreSQL 16 基础镜像
    FROM postgres:16
    # 安装 pgvector
    RUN apt-get update && \
        apt-get install -y postgresql-16-pgvector && \
        rm -rf /var/lib/apt/lists/*
    # 设置启动命令
    CMD ["postgres"]
    

    2、创建docker-compose.yaml文件。

    version: '3.8'
    services:
      postgres:
        build:
          context: .
          dockerfile: Dockerfile
        container_name: postgres
        environment:
          POSTGRES_USER: postgres
          POSTGRES_PASSWORD: postgres   # 密码
          POSTGRES_DB: postgres            # 默认数据库
        ports:
          - "5432:5432"
        volumes:
          - ${postgre_location}/postgres_data:/var/lib/postgresql/data
          - ./init.sql:/docker-entrypoint-initdb.d/init.sql  # 初始化脚本
        restart: always
        networks:
          - outside
    networks:
      outside:
        external: true
    

    3、创建初始化脚本init.sql,docker启动时,初始化postgre

    -- 启用 pgvector 扩展
    CREATE EXTENSION IF NOT EXISTS vector;
    

    文档结构如下

    your-project/
    ├── docker-compose.yaml
    ├── Dockerfile
    └── init.sql  # 内容为 CREATE EXTENSION vector;  
    

    启动docker

    docker compose up -d

    2-PostgreSQL docker compose 安装教程-Pgvector

    4、 登录postgres

    2-PostgreSQL docker compose 安装教程-Pgvector

    5、验证vector安装

    SELECT * FROM pg_extension;

    2-PostgreSQL docker compose 安装教程-Pgvector

    您已成功使用 Docker Compose 安装 pgvector 。此设置允许您利用 pgvector 在 PostgreSQL 数据库中存储和搜索嵌入。有关详细信息,请参阅 pgvector GitHub 官方文档。

    使用 pgvector 进行向量操作

    当处理小型数据集时,pgvector 允许进行精确的最近邻搜索而不需要近似。您可以使用各种距离函数,如 L2、余弦距离、内积和余弦相似度来找到最接近的匹配项。每个距离函数都使用其自己的运算符实现,可以无缝集成到 SQL 查询中:

    距离函数与操作符映射

    距离函数操作符索引运算符
    L2 距离vector_in_ops
    内积vector_l2_ops
    余弦距离vector_cosine_ops
    余弦相似度1 - (a b)vector_cosine_ops

    说明

    • L2 距离:使用操作符 和索引运算符 vector_in_ops。
    • 内积:使用操作符 和索引运算符 vector_l2_ops。
    • 余弦距离:使用操作符 和索引运算符 vector_cosine_ops。
    • 余弦相似度:通过计算 1 - (a b) 得到,并使用索引运算符 vector_cosine_ops。

      向量

      向量是多维空间中的数值表示,常用于语义搜索等任务。在 PostgreSQL 中,向量被视为·标准数据类型·,可以与其他数据类型一起存储和查询。

      pgvector 扩展增强了 PostgreSQL 的向量操作,包括内积、余弦距离和ANN 搜索功能。

      通过文本生成向量模型生成向量

      pgvector 进行向量操作的完整学习示例

      步骤 1: 创建测试表

      创建一个包含向量字段的表 products,存储商品信息及其向量化特征

      -- 创建表
      CREATE TABLE products (
          id SERIAL PRIMARY KEY,
          name VARCHAR(100),
          description TEXT,
          embedding VECTOR(3)  -- 假设使用 3 维向量(实际场景中维度可能为 512、768 等)
      );
      
      步骤 2: 插入示例数据

      插入 5 条示例数据,模拟不同商品的向量特征:

      INSERT INTO products (name, description, embedding) VALUES
      ('Laptop', '高性能笔记本电脑', '[0.9, 0.1, 0.2]'),
      ('Smartphone', '5G智能手机', '[0.8, 0.3, 0.1]'),
      ('Headphones', '降噪耳机', '[0.2, 0.7, 0.4]'),
      ('Camera', '4K数码相机', '[0.6, 0.5, 0.3]'),
      ('Watch', '智能手表', '[0.3, 0.6, 0.8]');
      
      步骤 3: 执行相似性搜索

      示例 1: 欧氏距离 (L2 距离)

      查找与目标向量 [0.7, 0.2, 0.3] 最相似的商品:

      select
      	name ,
      	description ,
      	embedding  '[0.7,0.2,0.3]' as distance
      from
      	products
      order by
      	distance
      limit 3 ;
      

      2-PostgreSQL docker compose 安装教程-Pgvector

      示例 2: 余弦相似度

      计算与目标向量 [0.7, 0.2, 0.3] 的余弦相似度(值越大越相似):

      SELECT 
          name, 
          description, 
          1 - (embedding  '[0.7, 0.2, 0.3]') AS cosine_similarity
      FROM products
      ORDER BY cosine_similarity DESC
      LIMIT 3;
      

      2-PostgreSQL docker compose 安装教程-Pgvector

      步骤 4: 创建索引优化查询

      为提升搜索性能,对向量字段创建 HNSW (分层的导航小世界) 索引(适合高维向量):

      这条 SQL 语句在 products 表的 embedding 列上创建了一个基于 HNSW 算法的索引,使用余弦相似度作为度量标准,并通过设置 m 和 ef_construction 参数来优化索引性能。这种索引非常适合处理高维向量数据的快速相似度搜索任务。

      CREATE INDEX ON products 
      USING hnsw (embedding vector_cosine_ops)
      WITH (m = 16, ef_construction = 64);
      
      SQL 语句解释
      1. 创建索引:

        • CREATE INDEX ON products:在 products 表上创建一个索引。
        • 索引类型:

          • USING hnsw:使用 HNSW(Hierarchical Navigable Small World)索引方法。HNSW 是一种高效的近似最近邻搜索算法,特别适用于高维向量数据的快速相似度查询。
          • 索引列和操作符类:

            • (embedding vector_cosine_ops):对 embedding 列创建索引,并使用 vector_cosine_ops 操作符类。这表示该索引将基于余弦相似度进行优化,适用于计算向量之间的余弦距离或相似度。
            • 索引参数:

              • WITH (m = 16, ef_construction = 64):指定 HNSW 索引的构建参数。
                • m = 16:控制每个节点的最大连接数(出度)。较大的值可以提高查询精度,但会增加索引构建时间和存储空间。
                • ef_construction = 64:控制索引构建时的候选节点数量。较大的值可以提高索引质量,但也增加了构建时间。
      步骤 5: 复杂查询示例

      结合文本筛选和向量搜索,查找描述中包含「智能」且与目标向量相似的商品:

      SELECT 
          name, 
          description, 
          embedding  '[0.7, 0.2, 0.3]' AS cosine_distance
      FROM products
      WHERE description LIKE '%智能%'
      ORDER BY cosine_distance
      LIMIT 3;
      

      2-PostgreSQL docker compose 安装教程-Pgvector

      以下是一个使用 pgvector 进行向量操作的完整学习示例,涵盖数据插入、相似性搜索和索引优化。假设你已经安装并启用了 pgvector 扩展(基于之前的 Docker 环境)。


      关键概念解释
      1. 距离度量

        • 欧氏距离 (L2): 运算符,值越小表示越相似。
        • 余弦相似度: 运算符,值越小表示余弦距离越近(等价于 1 - 余弦相似度)。
        • 索引类型

          • HNSW:适合高维向量,查询速度快,但索引体积较大。
          • IVFFlat:适合低维向量,需在数据插入后创建,支持更快构建。
          • 维度对齐

            确保插入的向量维度与表定义中的 VECTOR(N) 一致(本例为 3 维)。


      实际应用场景

      1. 推荐系统

        根据用户行为向量推荐相似商品。

      2. 语义搜索

        将文本编码为向量后搜索相似内容。

      3. 图像检索

        用图像特征向量搜索相似图片。


      性能优化建议

      1. 批量插入数据后创建索引

        避免频繁更新索引带来的性能损耗。

      2. 合理选择索引参数

        例如 m(HNSW 的邻接节点数)和 ef_search(搜索深度)。

      3. 归一化向量

        使用余弦相似度时,提前将向量归一化可提升精度。

      基础语法

      https://postgresql.mosong.cc/guide/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS

免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们。

目录[+]

取消
微信二维码
微信二维码
支付宝二维码