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
相关产品推荐
相关产品推荐

