如何基于LlamaIndex和Qdrant从指定document_id查询特定文档?
仅从特定文档查询的实现方法
SimpleDirectoryReader在索引文档时,会自动为每个文档添加file_name、file_path这类元数据,我们可以利用这些元数据在查询阶段过滤出目标文档,具体实现如下:
方法1:自定义带过滤条件的检索器
直接创建指定过滤规则的检索器,再用它初始化聊天引擎,就能限定只从特定文档中搜索:
from llama_index.core.retrievers import VectorIndexRetriever from llama_index.core.chat_engine import ContextChatEngine # 创建检索器,指定要查询的目标文件名 retriever = VectorIndexRetriever( index=index, similarity_top_k=5, # 保持你原来的Top-K配置 filter={"file_name": "你的目标文档名.md"} # 替换成实际文件名 ) # 用带过滤的检索器构建聊天引擎 chat_engine = ContextChatEngine.from_defaults( retriever=retriever, service_context=service_context, verbose=False ) # 发起查询,只会从指定文档中匹配结果 chat_engine.chat("Who is wiki?")
如果需要从多个特定文档查询,可使用or逻辑组合条件:
filter={ "or": [ {"file_name": "文档1.md"}, {"file_name": "文档2.txt"} ] }
补充说明
- 除了
file_name,你还可以用file_path(完整文件路径)作为过滤字段,适合区分同名文件; - 如果索引时自定义了其他元数据(比如文档类别标签),也可以用对应字段构建过滤规则。
内容的提问来源于stack exchange,提问作者Ravi
相关产品推荐
相关产品推荐

