链接:https://milvus.io/[Milvus] 是一个开源的向量数据库,在数据科学和机器学习领域获得了重大关注。它的一个显著特点在于对向量索引和查询的强大支持。Milvus 采用最先进的尖端算法来加速搜索过程,使其在检索相似向量时,即使处理大量数据集也能保持异常高效。
前提条件
-
一个正在运行的Milvus实例。以下选项可用:
-
链接:https://milvus.io/docs/install_standalone-docker.md [Milvus 独立部署]:Docker、Operator、Helm、DEB/RPM、Docker Compose。
-
链接: https://milvus.io/docs/install_cluster-milvusoperator.md [Milvus 集群]: 操作员,Helm。
-
-
如果需要,可以为EmbeddingClient提供一个API密钥,以生成`MilvusVectorStore`存储的嵌入向量。
依赖项
然后将 Milvus VectorStore 启动器依赖添加到您的项目中:
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-milvus-store-spring-boot-starter</artifactId>
</dependency>
或者添加到你的Gradle build.gradle
构建文件中。
dependencies {
implementation 'org.springframework.ai:spring-ai-milvus-store-spring-boot-starter'
}
Vector Store同样需要一个`EmbeddingClient`实例来为文档计算嵌入向量。你可以选择一个可用的嵌入客户端实现。
要连接和配置`MilvusVectorStore`,你需要为你的实例提供访问详情。一个简单的配置可以通过Spring Boot的`application.yml`提供。
spring: ai: vectorstore: milvus: client: host: "localhost" port: 19530 username: "root" password: "milvus" databaseName: "default" collectionName: "vector_store" embeddingDimension: 1536 indexType: IVF_FLAT metricType: COSINE
Tip
|
查看配置参数的列表以了解默认值和配置选项。 |
现在您可以在应用程序中自动连接Milvus向量存储并使用它。
@Autowired VectorStore vectorStore;
// ...
List <Document> documents = List.of(
new Document("Spring AI rocks!! Spring AI rocks!! Spring AI rocks!! Spring AI rocks!! Spring AI rocks!!", Map.of("meta1", "meta1")),
new Document("The World is Big and Salvation Lurks Around the Corner"),
new Document("You walk forward facing the past and you turn back toward the future.", Map.of("meta2", "meta2")));
// 将文档添加到PGVector
vectorStore.add(documents);
// Retrieve documents similar to a query
List<Document> results = vectorStore.similaritySearch(SearchRequest.query("Spring").withTopK(5));
手动配置
与其使用Spring Boot自动配置,不如手动配置`MilvusVectorStore`。要将以下依赖项添加到您的项目中:
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-milvus-store</artifactId>
</dependency>
Tip
|
参考依赖管理部分,将Spring AI BOM添加到您的构建文件中。 |
在您的应用程序中配置MilvusVectorStore,可以使用以下设置:
@Bean
public VectorStore vectorStore(MilvusServiceClient milvusClient, EmbeddingClient embeddingClient) {
MilvusVectorStoreConfig config = MilvusVectorStoreConfig.builder()
.withCollectionName("test_vector_store")
.withDatabaseName("default")
.withIndexType(IndexType.IVF_FLAT)
.withMetricType(MetricType.COSINE)
.build();
return new MilvusVectorStore(milvusClient, embeddingClient, config);
}
@Bean
public MilvusServiceClient milvusClient() {
return new MilvusServiceClient(ConnectParam.newBuilder()
.withAuthorization("minioadmin", "minioadmin")
.withUri(milvusContainer.getEndpoint())
.build());
}
元数据过滤
你可以利用 Milvus 存储的通用、可移植的链接:https://docs.spring.io/spring-ai/reference/api/vectordbs.html#_metadata_filters[元数据过滤器]。
例如,你可以使用文本表达式语言:
vectorStore.similaritySearch(
SearchRequest.defaults()
.withQuery("The World")
.withTopK(TOP_K)
.withSimilarityThreshold(SIMILARITY_THRESHOLD)
.withFilterExpression("author in ['john', 'jill'] && article_type == 'blog'"));
或者使用`Filter.Expression` DSL进行编程设置:
FilterExpressionBuilder b = new FilterExpressionBuilder();
vectorStore.similaritySearch(SearchRequest.defaults()
.withQuery("The World")
.withTopK(TOP_K)
.withSimilarityThreshold(SIMILARITY_THRESHOLD)
.withFilterExpression(b.and(
b.in("john", "jill"),
b.eq("article_type", "blog")).build()));
Note
|
这些过滤表达式被转换成相等的PgVector过滤器。 |
Milvus VectorStore 属性
您可以在Spring Boot配置中使用以下属性来自定义Milvus向量存储。
属性 | 描述 | 默认值 |
---|---|---|
spring.ai.vectorstore.milvus.database-name |
使用的Milvus数据库的名称。 |
|
default |
spring.ai.vectorstore.milvus.collection-name |
|
存储向量的Milvus集合名称 |
vector_store |
|
spring.ai.vectorstore.milvus.embedding-dimension |
存储在Milvus集合中的向量的维度。 |
1536 |
spring.ai.vectorstore.milvus.index-type |
为Milvus集合创建的索引类型。 |
|
IVF_FLAT |
spring.ai.vectorstore.milvus.metric-type |
|
用于Milvus集合的度量类型。 |
COSINE |
|
spring.ai.vectorstore.milvus.index-parameters |
用于Milvus集合的索引参数。 |
{"nlist":1024} |
spring.ai.vectorstore.milvus.client.host |
主机的名称或地址。 |
|
localhost |
spring.ai.vectorstore.milvus.client.port |
|
连接端口。 |
19530 |
|
spring.ai.vectorstore.milvus.client.uri |
Milvus实例的uri |
- |
spring.ai.vectorstore.milvus.client.token |
作为身份识别和认证目的的令牌。 |
|
- |
spring.ai.vectorstore.milvus.client.connect-timeout-ms |
|
客户端通道的连接超时值。超时值必须大于零。 |
10000 |
|
spring.ai.vectorstore.milvus.client.keep-alive-time-ms |
客户端通道的保持活动时间值。保活时间值必须大于零。 |
55000 |
spring.ai.vectorstore.milvus.client.keep-alive-timeout-ms |
客户端通道的保持活动超时值。超时值必须大于零。 |
|
20000 |
spring.ai.vectorstore.milvus.client.rpc-deadline-ms |
|
您愿意等待服务器回复的期限。设置了截止期限,客户端在遇到网络波动导致的快速RPC失败时将等待。截止日期值必须大于或等于零。 |
0 |
|
spring.ai.vectorstore.milvus.client.client-key-path |
tls双向认证的client.key路径,仅当"secure"为true时生效 |
- |
spring.ai.vectorstore.milvus.client.client-pem-path |
tls双向认证的client.pem路径,仅当"secure"为true时生效 |
|
- |
spring.ai.vectorstore.milvus.client.ca-pem-path |
|
tls双向认证的ca.pem路径,仅当"secure"为true时生效 |
- |
|
spring.ai.vectorstore.milvus.client.server-pem-path |
tls单向认证的server.pem路径,仅当"secure"为true时生效。 |
- |
spring.ai.vectorstore.milvus.client.server-name |
为SSL主机名称检查设置目标名称覆盖,仅当"secure"为True时生效。 注意:此值传递给grpc.ssl_target_name_override |
|
- |
spring.ai.vectorstore.milvus.client.secure |
|
为此连接授权安全,设置为True以启用TLS。 |
false |
|
spring.ai.vectorstore.milvus.client.idle-timeout-ms |
客户端通道的空闲超时值。超时值必须大于零。 |
24h |
spring.ai.vectorstore.milvus.client.username |
此连接的用户名和密码。 |
|
root |
spring.ai.vectorstore.milvus.client.password |
|
此连接的密码。 |
milvus |
启动 Milvus 存储
从`src/test/resources/`文件夹内运行:
docker-compose up
清洁环境:
docker-compose down; rm -Rf ./volumes
然后连接到链接上的向量存储:[http://localhost:19530](http://localhost:19530) 或者用于管理的链接:[http://localhost:9001](http://localhost:9001) (用户名:minioadmin
,密码:minioadmin
)
故障排除
如果 Docker 抱怨资源问题,那么执行:
docker system prune --all --force --volumes