feat(milvus): 实现Milvus向量数据库集成

- 添加Milvus Java SDK依赖
- 实现MilvusVectorStoreStrategy核心功能
- 支持集合管理、数据存储、向量搜索和数据删除
- 添加Milvus实现指南文档
- 更新数据库连接配置
- 修改VectorStoreService接口添加异常声明
This commit is contained in:
Yzm
2025-09-29 18:36:48 +08:00
parent 39fe2cc48f
commit ef49429543
5 changed files with 460 additions and 213 deletions

View File

@@ -0,0 +1,237 @@
# Milvus向量库实现指南
## 概述
本项目已完成Milvus向量库的集成基于Milvus SDK 2.6.4版本实现。Milvus是一个开源的向量数据库专为AI应用和相似性搜索而设计。
## 实现特性
### ✅ 已实现功能
1. **集合管理**
- 自动创建集合Collection
- 检查集合是否存在
- 删除集合
2. **数据存储**
- 批量插入向量数据
- 支持文本、fid、kid、docId等元数据
- 自动生成向量嵌入
3. **向量搜索**
- 基于相似性的向量搜索
- 支持TopK结果返回
- 返回相关文本内容
4. **数据删除**
- 按文档ID删除
- 按片段ID删除
- 删除整个集合
## 架构设计
### 策略模式实现
```
AbstractVectorStoreStrategy (抽象基类)
MilvusVectorStoreStrategy (Milvus实现)
WeaviateVectorStoreStrategy (Weaviate实现)
```
### 核心类说明
- **MilvusVectorStoreStrategy**: Milvus向量库策略实现
- **VectorStoreStrategyFactory**: 向量库策略工厂,支持动态切换
- **VectorStoreService**: 向量库服务接口
## 配置说明
### 必需配置项
在系统配置中需要设置以下Milvus相关配置
```properties
# Milvus服务地址
milvus.url=http://localhost:19530
# 集合名称前缀
milvus.collectionname=LocalKnowledge
# 向量库类型选择
vector.store_type=milvus
```
### 集合Schema设计
每个集合包含以下字段:
| 字段名 | 类型 | 说明 |
|--------|------|------|
| id | Int64 | 主键,自动生成 |
| text | VarChar(65535) | 文本内容 |
| fid | VarChar(255) | 片段ID |
| kid | VarChar(255) | 知识库ID |
| docId | VarChar(255) | 文档ID |
| vector | FloatVector(1024) | 向量数据 |
### 索引配置
- **索引类型**: IVF_FLAT
- **距离度量**: L2 (欧几里得距离)
- **参数**: nlist=1024
## 使用示例
### 1. 创建集合
```java
MilvusVectorStoreStrategy strategy = new MilvusVectorStoreStrategy(configService);
strategy.createSchema("bge-large-zh-v1.5", "test001", "test-model");
```
### 2. 存储向量数据
```java
StoreEmbeddingBo storeEmbeddingBo = new StoreEmbeddingBo();
storeEmbeddingBo.setVectorModelName("bge-large-zh-v1.5");
storeEmbeddingBo.setKid("test001");
storeEmbeddingBo.setDocId("doc001");
storeEmbeddingBo.setChunkList(Arrays.asList("文本1", "文本2"));
storeEmbeddingBo.setFids(Arrays.asList("fid001", "fid002"));
strategy.storeEmbeddings(storeEmbeddingBo);
```
### 3. 查询向量数据
```java
QueryVectorBo queryVectorBo = new QueryVectorBo();
queryVectorBo.setQuery("查询文本");
queryVectorBo.setKid("test001");
queryVectorBo.setMaxResults(5);
List<String> results = strategy.getQueryVector(queryVectorBo);
```
### 4. 删除数据
```java
// 按文档ID删除
strategy.removeByDocId("doc001", "test001");
// 按片段ID删除
strategy.removeByFid("fid001", "test001");
// 删除整个集合
strategy.removeById("test001", "model");
```
## 部署要求
### Milvus服务部署
1. **Docker部署** (推荐)
```bash
# 下载docker-compose文件
wget https://github.com/milvus-io/milvus/releases/download/v2.6.4/milvus-standalone-docker-compose.yml -O docker-compose.yml
# 启动Milvus
docker-compose up -d
```
2. **验证部署**
```bash
# 检查服务状态
docker-compose ps
# 查看日志
docker-compose logs milvus-standalone
```
### 系统要求
- **内存**: 最少8GB推荐16GB+
- **存储**: SSD推荐至少50GB可用空间
- **CPU**: 4核心以上
- **网络**: 确保19530端口可访问
## 性能优化
### 1. 索引优化
根据数据量调整索引参数:
- 小数据集(<100万): nlist=1024
- 中等数据集(100万-1000万): nlist=4096
- 大数据集(>1000万): nlist=16384
### 2. 批量操作
- 批量插入建议每批1000-10000条记录
- 批量查询:避免频繁的单条查询
### 3. 内存管理
```yaml
# docker-compose.yml中的内存配置
environment:
MILVUS_CONFIG_PATH: /milvus/configs/milvus.yaml
volumes:
- ./milvus.yaml:/milvus/configs/milvus.yaml
```
## 故障排除
### 常见问题
1. **连接失败**
- 检查Milvus服务是否启动
- 验证网络连接和端口
- 确认配置中的URL正确
2. **集合创建失败**
- 检查集合名称是否符合规范
- 验证字段定义是否正确
- 查看Milvus日志获取详细错误
3. **插入数据失败**
- 确认向量维度与schema一致
- 检查数据格式是否正确
- 验证集合是否已加载
4. **查询无结果**
- 确认集合中有数据
- 检查查询参数设置
- 验证向量化模型一致性
### 日志调试
启用详细日志:
```properties
logging.level.org.ruoyi.service.strategy.impl.MilvusVectorStoreStrategy=DEBUG
logging.level.io.milvus=DEBUG
```
## 与Weaviate对比
| 特性 | Milvus | Weaviate |
|------|--------|----------|
| 性能 | 高性能,专为大规模设计 | 中等性能 |
| 部署 | 需要独立部署 | 可独立部署或云服务 |
| 生态 | 专注向量搜索 | 集成更多AI功能 |
| 学习成本 | 中等 | 较低 |
| 扩展性 | 优秀 | 良好 |
## 后续优化建议
1. **连接池管理**: 实现MilvusClient连接池
2. **异步操作**: 支持异步插入和查询
3. **分片策略**: 大数据集的分片管理
4. **监控告警**: 集成性能监控
5. **备份恢复**: 数据备份和恢复机制
## 参考资料
- [Milvus官方文档](https://milvus.io/docs)
- [Milvus Java SDK](https://github.com/milvus-io/milvus-sdk-java)
- [向量数据库最佳实践](https://milvus.io/docs/performance_faq.md)