You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PGVector已索引文档数量查询及元数据筛选获取文档方法求助

PGVector 元数据筛选与文档总数查询方案

问题背景

此前使用ChromaDB时,可通过db.get(where={'file_id': file_id})按元数据筛选指定文档;切换到PGVector完成文档入库后,无法找到类似的元数据筛选方式,尝试as_retriever后不知如何输出结果,且默认仅返回4条文档;同时需要查询已索引的文档总数。

解决方案

1. 按元数据筛选获取文档

PGVector(LangChain封装版本)支持两种方式实现元数据筛选:

方式一:直接使用get方法(与ChromaDB用法一致)

和ChromaDB的get方法逻辑完全相同,可直接按元数据匹配获取文档:

# 按file_id筛选文档
filtered_docs = db.get(
    filter={
        'file_id': file_id
    }
)
# 输出文档内容
print(filtered_docs['documents'])

方式二:通过检索器获取(支持语义+元数据筛选)

如果需要结合语义检索+元数据筛选,可使用as_retriever,通过search_kwargs设置筛选条件和返回条数,再调用get_relevant_documents获取结果:

retriever = db.as_retriever(
    search_kwargs={
        'filter': {'file_id': file_id},
        'k': 20  # 自定义返回条数,替代默认的4条
    }
)
# 获取结果(空字符串表示不做语义检索,仅按元数据筛选)
results = retriever.get_relevant_documents("")
# 遍历输出文档内容
for doc in results:
    print(doc.page_content)

2. 查询已索引文档总数

提供两种高效的查询方式:

方式一:通过PGVector内置方法查询

# 获取所有文档的统计
all_docs = db.get()
total_count = len(all_docs['documents'])
print(f"已索引文档总数:{total_count}")

方式二:直接执行SQL查询(大数据量时更高效)

直接操作PostgreSQL数据库执行计数查询,默认表名由LangChain自动生成:

from sqlalchemy import create_engine

# 使用已有的连接字符串创建引擎
engine = create_engine(db.connection_string)
with engine.connect() as conn:
    # 查询指定collection下的文档总数
    query = """
    SELECT COUNT(*) 
    FROM langchain_pg_embedding 
    WHERE collection_id = (SELECT uuid FROM langchain_pg_collection WHERE name = 'test')
    """
    total_count = conn.execute(query).scalar()
    print(f"已索引文档总数:{total_count}")

内容的提问来源于stack exchange,提问作者Aleksey Romanov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 20:45:59