Milvus
Milvus 是一个开源向量数据库,在数据科学和机器学习领域引起了极大关注。其突出特点之一是对向量索引和查询的强大支持。Milvus 采用最先进、前沿的算法来加速搜索进程,使其即使在处理海量数据集时也能高效地检索相似向量。
Prerequisites
-
一个正在运行的 Milvus 实例。以下选项可用:
-
Milvus Standalone:Docker、Operator、Helm、DEB/RPM、Docker Compose。
-
Milvus Cluster: Operator, Helm.
-
-
如果需要,生成
MilvusVectorStore
存储的嵌入的 EmbeddingClient 的 API 密钥。
Dependencies
然后将 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'
}
向量存储还要求 EmbeddingClient
实例为文档计算嵌入。您可以选择一个可用的 EmbeddingClient Implementations。
请参阅 Dependency Management 部分,将 Spring AI BOM 添加到您的构建文件中。请参阅 Repositories 部分,将 Milestone 和/或快照存储库添加到您的构建文件中。 |
要连接并配置 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
查看 configuration parameters 列表了解默认值和配置选项。 |
现在,你可以在应用程序中自动装配 Milvus Vector Store 并使用它了
@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")));
// Add the documents to PGVector
vectorStore.add(documents);
// Retrieve documents similar to a query
List<Document> results = vectorStore.similaritySearch(SearchRequest.query("Spring").withTopK(5));
Manual Configuration
除了使用 Spring Boot 自动配置外,还可以手动配置 MilvusVectorStore
。将以下依赖项添加到你的项目:
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-milvus-store</artifactId>
</dependency>
|
可以在应用程序中使用以下设置配置 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());
}
Metadata filtering
您可以将通用的、可移植的 metadata filters 与 Milvus 存储结合使用。
例如,你可以使用文本表达式语言:
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()));
这些筛选表达式被转换为等同的 PgVector 筛选。 |
Milvus VectorStore properties
您可以在 Spring Boot 配置中使用以下属性来定制 Milvus 向量存储。
Property | Description | Default value |
---|---|---|
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 |
The connection port. |
19530 |
spring.ai.vectorstore.milvus.client.uri |
Milvus 实例的 uri |
- |
spring.ai.vectorstore.milvus.client.token |
用作身份验证和身份识别密钥的令牌。 |
- |
spring.ai.vectorstore.milvus.client.connect-timeout-ms |
客户端通道的连接超时值。超时值必须大于 0。 |
10000 |
spring.ai.vectorstore.milvus.client.keep-alive-time-ms |
客户端通道的存活时间值。存活时间必须大于 0。 |
55000 |
spring.ai.vectorstore.milvus.client.keep-alive-timeout-ms |
客户端通道的存活超时值。超时值必须大于 0。 |
20000 |
spring.ai.vectorstore.milvus.client.rpc-deadline-ms |
您愿意等待服务器响应的时限。有了时限设置,当遇到由网络波动引起的快速 RPC 故障时,客户端将会等待。时限值必须大于或等于 0。 |
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 |
Starting Milvus Store
在 src/test/resources/
文件夹中运行:
docker-compose up
要清除环境:
docker-compose down; rm -Rf ./volumes
然后连接到 http://localhost:19530 上的向量存储,或者用于管理 http://localhost:9001(用户:minioadmin
,密码:minioadmin
)