# 引言
在现代应用程序中,尤其是涉及AI和大数据的场景,搜索相似内容的高效性和准确性显得至关重要。Milvus是一个开源的向量数据库,它让未结构化数据的搜索变得更加容易。这篇文章将引导您了解如何使用Milvus的Hybrid Search Retriever来结合密集向量和稀疏向量搜索的优势,以实现更强大的检索能力。
# 主要内容
## Milvus Hybrid Search Retriever的优势
Milvus的Hybrid Search Retriever整合了密集和稀疏向量的搜索方法,优化了检索的准确性和效率。通过在同一个检索过程中利用两种不同的向量表达方式,Milvus可以提供更高的搜索准确性和更低的延迟。
## 集成和设置
要使用Milvus的Hybrid Search Retriever,您需要确保安装了相关的Python包:
```bash
%pip install --upgrade --quiet pymilvus[model] langchain-milvus langchain-openai
Milvus集合的创建需要遵循以下步骤:
- 启动Milvus服务并连接到Milvus实例。
- 创建字段和对应的数据类型。
- 创建集合并为密集和稀疏向量定义索引。
代码示例:
from pymilvus import (
Collection,
CollectionSchema,
DataType,
FieldSchema,
connections,
)
# 连接至Milvus服务
connections.connect(uri="http://localhost:19530") # 请根据需要使用代理服务提高访问稳定性
# 定义数据架构
fields = [
FieldSchema(
name="doc_id",
dtype=DataType.VARCHAR,
is_primary=True,
auto_id=True,
max_length=100,
),
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=65_535),
]
# 创建集合
schema = CollectionSchema(fields=fields, enable_dynamic_field=False)
collection = Collection(name="IntroductionToTheNovels", schema=schema, consistency_level="Strong")
生成嵌入并插入数据
使用OpenAI的嵌入API生成密集向量,并使用BM25算法生成稀疏向量,随后将文本数据插入Milvus集合。
执行检索
通过调用Milvus的Hybrid Search Retriever,使用混合索引进行高效的检索:
retriever = MilvusCollectionHybridSearchRetriever(
collection=collection,
rerank=WeightedRanker(0.5, 0.5),
anns_fields=["dense_vector", "sparse_vector"],
field_embeddings=[dense_embedding_func, sparse_embedding_func],
field_search_params=[{
"metric_type": "IP"}, {
"metric_type": "IP"}],
top_k=3,
text_field="text",
)
# 执行查询
results = retriever.invoke("What are the story about ventures?")
常见问题和解决方案
-
连接问题:如果您在连接Milvus服务器时遇到问题,请确保网络设置允许访问指定的URI。在某些地区,您可能需要使用API代理服务进行连接。
-
嵌入生成问题:使用OpenAI的API时,确保API密钥的正确配置,并注意API调用次数的限制。
总结和进一步学习资源
Milvus的Hybrid Search Retriever是一个强大的工具,可以帮助您实现更高效和准确的数据检索。通过结合密集和稀疏向量的优势,您可以在各种应用场景中最大化搜索能力。
参考资料
如果这篇文章对你有帮助,欢迎点赞并关注我的博客。您的支持是我持续创作的动力!
---END---