探索 Milvus 混合搜索检索器:实现高效向量搜索
引言
在现代数据驱动的世界中,快速且精确地检索信息的能力至关重要。Milvus 是一个开源的向量数据库,专为嵌入相似性搜索和 AI 应用而设计。本篇文章将引导您了解 Milvus 的混合搜索检索器——融合了密集和稀疏向量搜索的优势。通过本文,您将学会如何使用 Milvus 来实现高效的数据检索。
主要内容
1. Milvus 混合搜索概述
Milvus 的混合搜索功能结合了密集向量(通过神经网络生成)和稀疏向量(通过词频-逆文档频率等算法生成)的搜索能力。这种方法不仅提高了搜索的精准度,还提升了检索的性能。
2. 基础配置
-
安装依赖包:
%pip install --upgrade --quiet pymilvus[model] langchain-milvus langchain-openai
-
初始化 Milvus 服务:
请参阅 Milvus 文档 来启动 Milvus 服务。启动后,指定连接 URI:
CONNECTION_URI = "http://localhost:19530" # 使用API代理服务提高访问稳定性
-
设置 OpenAI API 密钥:
获取 API 密钥并设置为环境变量。
export OPENAI_API_KEY=<your_api_key>
3. 创建和使用 Milvus 集合
from langchain_milvus.retrievers import MilvusCollectionHybridSearchRetriever
from pymilvus import Collection, CollectionSchema, DataType, FieldSchema, connections
# 连接到 Milvus
connections.connect(uri=CONNECTION_URI)
# 定义领域和数据类型
fields = [
FieldSchema(name="doc_id", dtype=DataType.VARCHAR, is_primary=True, auto_id=True),
FieldSchema(name="dense_vector", dtype=DataType.FLOAT_VECTOR, dim=1536),
FieldSchema(name="sparse_vector", dtype=DataType.SPARSE_FLOAT_VECTOR),
FieldSchema(name="text", dtype=DataType.VARCHAR, max_length=65535),
]
# 创建集合
schema = CollectionSchema(fields=fields, enable_dynamic_field=False)
collection = Collection(name="IntroductionToTheNovels", schema=schema)
# 插入实体
entities = [
{"dense_vector": [1.2, 0.2, ...], "sparse_vector": {0: 0.4, 2: 1.8}, "text": "Some text"},
# 更多实体...
]
collection.insert(entities)
collection.load()
# 实例化检索器
retriever = MilvusCollectionHybridSearchRetriever(
collection=collection,
anns_fields=["dense_vector", "sparse_vector"],
top_k=3,
text_field="text",
)
# 使用检索器
results = retriever.invoke("查询文本")
常见问题和解决方案
- 网络连接问题:由于某些地区的网络限制,开发者可能需要使用 API 代理服务来访问 Milvus 和 OpenAI API 。
- 性能优化:增大批量插入的大小可以提高数据写入的效率。
总结和进一步学习资源
Milvus 的混合搜索检索器为开发者提供了一种灵活且强大的工具来处理大规模的非结构化数据搜索。通过结合密集和稀疏向量,Milvus 能够在多种应用场景下提供出色的搜索性能。
进一步学习资源
参考资料
- Milvus 官方文档
- Langchain Milvus 项目页面
- OpenAI API 使用文档
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
—END—