如何在Haystack中使用Qdrant集合?连接、写入及过滤查询方法
在Haystack中使用Qdrant指定集合的实操步骤
连接已创建的Qdrant集合
初始化QdrantDocumentStore时,直接指定你已通过Qdrant Python SDK创建好的集合名称,同时配置Qdrant的连接信息:
from haystack.document_stores import QdrantDocumentStore # 连接到远程Qdrant服务的指定集合 document_store = QdrantDocumentStore( host="localhost", # Qdrant服务地址 port=6333, # Qdrant端口 collection_name="your_existing_collection", # 你已创建的集合名 embedding_dim=768 # 需与集合中向量维度一致 )
如果是本地磁盘存储的Qdrant实例,替换host和port为path参数:
document_store = QdrantDocumentStore( path="./qdrant_local_data", collection_name="your_existing_collection", embedding_dim=768 )
向特定集合写入文档
先构造Haystack的Document对象,调用write_documents方法即可将数据写入指定集合:
from haystack import Document # 构造示例文档 docs = [ Document( content="这是测试文档1的核心内容", meta={"category": "科技", "author": "张三"} ), Document( content="这是测试文档2的核心内容", meta={"category": "财经", "author": "李四"} ) ] # 写入到目标集合 document_store.write_documents(docs)
搜索时应用集合过滤
场景1:仅在指定集合内搜索
若初始化QdrantDocumentStore时已绑定目标集合,后续检索组件会默认在该集合内执行搜索:
from haystack.nodes import EmbeddingRetriever from haystack.pipelines import RetrievalPipeline # 初始化与集合匹配的嵌入检索器 retriever = EmbeddingRetriever( document_store=document_store, embedding_model="sentence-transformers/all-MiniLM-L6-v2" ) # 创建检索管道并执行查询 pipeline = RetrievalPipeline(retriever=retriever) result = pipeline.run(query="科技领域内容", params={"top_k": 3}) # 输出检索结果 for doc in result["documents"]: print(f"内容:{doc.content}\n元数据:{doc.meta}\n")
场景2:跨多个集合搜索并过滤
如果需要同时操作多个集合,初始化QdrantDocumentStore时可不指定集合名,检索时通过filters参数指定目标集合:
# 初始化不绑定特定集合的DocumentStore document_store = QdrantDocumentStore( host="localhost", port=6333, embedding_dim=768 ) retriever = EmbeddingRetriever( document_store=document_store, embedding_model="sentence-transformers/all-MiniLM-L6-v2" ) # 指定要搜索的多个集合 result = retriever.retrieve( query="财经领域内容", top_k=3, filters={"collection": ["your_existing_collection", "finance_collection"]} )
场景3:集合内文档元数据过滤
在指定集合内按文档元数据(如分类、作者)筛选,同样通过filters参数实现:
result = retriever.retrieve( query="相关内容", top_k=3, filters={"meta": {"category": "科技", "author": "张三"}} )
内容的提问来源于stack exchange,提问作者Stephane
相关产品推荐
相关产品推荐

