如何使用Marqo基于索引内已有文档实现相似推荐?
使用Marqo基于已有文档获取相似推荐的实现方法
核心思路
Marqo支持通过文档的ID或内容特征进行相似性搜索,本质是用目标文档的向量匹配索引内其他文档的向量,无需额外文本查询。
具体实现步骤
1. 初始化Marqo客户端
先确认Marqo服务已启动,再初始化客户端:
from marqo import Client # 本地Marqo服务默认端口为8882 mq = Client(url="http://localhost:8882")
2. 基于目标文档ID搜索相似内容
如果已知目标文档的_id,可直接用该ID触发相似检索:
# 替换为你的索引名和目标文档ID index_name = "your-document-index" target_doc_id = "target-doc-xxxx" results = mq.index(index_name).search( q=None, # 无需文本查询,设为None searchable_attributes=["*"], # 检索所有字段的向量 limit=5, # 返回Top5相似文档 using_document_ids=[target_doc_id] # 指定用于匹配的目标文档ID ) # 遍历输出结果 for hit in results["hits"]: print(f"文档ID: {hit['_id']}, 相似度得分: {hit['_score']}") print(f"文档内容摘要: {hit['content']}\n")
3. 基于目标文档内容片段搜索相似内容
若不知道目标文档ID,可直接用其内容片段生成向量进行匹配:
# 替换为目标文档的特征内容片段 target_content = "这里是你要匹配的目标文档的核心内容片段" results = mq.index(index_name).search( q=target_content, searchable_attributes=["content"], # 指定要匹配的字段 limit=5 ) # 处理并输出结果 for hit in results["hits"]: print(f"文档ID: {hit['_id']}, 相似度得分: {hit['_score']}") print(f"文档内容摘要: {hit['content']}\n")
关键注意事项
using_document_ids是核心参数:传入已存在的文档ID时,Marqo会直接调用该文档的向量进行检索,跳过文本编码步骤,效率更高。- 确保索引时需匹配的字段已开启向量化(Marqo默认会为文本字段自动生成向量)。
- 相似度得分越高,文档匹配度越强,可通过
limit参数控制返回结果数量。
内容的提问来源于stack exchange,提问作者rbdcgalaxy
相关产品推荐
相关产品推荐

