2-PostgreSQL docker compose 安装教程-Pgvector
https://i-blog.csdnimg.cn/direct/2226c282b737434082261a73a9110591.pngpgvector先容
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
https://i-blog.csdnimg.cn/direct/b4968e57142b40bd9a6a60038f2f5c34.png
4、 登录postgres
https://i-blog.csdnimg.cn/direct/cc8257002e394c0b93a60f6b96230b52.png
5、验证vector安装
SELECT * FROM pg_extension;
https://i-blog.csdnimg.cn/direct/862a67bb95bf4ee599e8031db938c94d.png
您已乐成使用 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', '高性能笔记本电脑', ''),
('Smartphone', '5G智能手机', ''),
('Headphones', '降噪耳机', ''),
('Camera', '4K数码相机', ''),
('Watch', '智能手表', '');
步骤 3: 执行相似性搜刮
示例 1: 欧氏距离 (L2 距离)
查找与目标向量 最相似的商品:
select
name ,
description ,
embedding <-> '' as distance
from
products
order by
distance
limit 3 ;
https://i-blog.csdnimg.cn/direct/dc71569e1b4945b2aee7fcf219badae6.png
示例 2: 余弦相似度
计算与目标向量 的余弦相似度(值越大越相似):
SELECT
name,
description,
1 - (embedding <=> '') AS cosine_similarity
FROM products
ORDER BY cosine_similarity DESC
LIMIT 3;
https://i-blog.csdnimg.cn/direct/b4db69c2a7a54a6a9d480b112c7e5a39.png
步骤 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 语句解释
[*] 创建索引:
[*]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 <=> '' AS cosine_distance
FROM products
WHERE description LIKE '%智能%'
ORDER BY cosine_distance
LIMIT 3;
https://i-blog.csdnimg.cn/direct/4975237d1e3e4b00b309385e6b12684b.png
以下是一个使用 pgvector 进行向量利用的完备学习示例,涵盖数据插入、相似性搜刮和索引优化。假设你已经安装并启用了 pgvector 扩展(基于之前的 Docker 情况)。
关键概念解释
[*] 距离度量
[*]欧氏距离 (L2):<-> 运算符,值越小表现越相似。
[*]余弦相似度:<=> 运算符,值越小表现余弦距离越近(等价于 1 - 余弦相似度)。
[*] 索引类型
[*]HNSW:得当高维向量,查询速率快,但索引体积较大。
[*]IVFFlat:得当低维向量,需在数据插入后创建,支持更快构建。
[*] 维度对齐
确保插入的向量维度与表定义中的 VECTOR(N) 一致(本例为 3 维)。
现实应用场景
[*]推荐系统
根据用户行为向量推荐相似商品。
[*]语义搜刮
将文本编码为向量后搜刮相似内容。
[*]图像检索
用图像特征向量搜刮相似图片。
性能优化发起
[*]批量插入数据后创建索引
避免频繁更新索引带来的性能损耗。
[*]公道选择索引参数
例如 m(HNSW 的邻接节点数)和 ef_search(搜刮深度)。
[*]归一化向量
使用余弦相似度时,提前将向量归一化可提升精度。
底子语法
https://postgresql.mosong.cc/guide/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]