Milvus
Milvus 是一个开源向量数据库,在数据科学和机器学习领域引起了广泛关注。其突出的功能之一在于对向量索引和查询的强大支持。 Milvus 采用最先进的尖端算法来加速搜索过程,使其在检索相似向量方面异常高效,即使在处理大量数据集时也是如此。
先决条件
- 运行 Milvus 实例。可以使用以下选项:
- Milvus 单机版:Docker、Operator、Helm、DEB/RPM、Docker Compose。
- Milvus Cluster:Operator, 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'
}
向量存储还需要一个EmbeddingClient
实例来计算文档的嵌入。您可以选择可用的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
现在您可以在应用程序中自动连接 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));
手动配置
除了使用 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());
}
元数据过滤
您可以将通用、可移植的元数据过滤器与 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()));
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 | 您愿意等待服务器回复的截止时间。通过设置deadline,当遇到网络波动导致的快速RPC失败时,客户端会等待。截止时间值必须大于或等于零。 | 0 |
spring.ai.vectorstore.milvus.client.client-key-path | The client.key path for tls two-way authentication, only takes effect when “secure” is true | - |
spring.ai.vectorstore.milvus.client.client-pem-path | The client.pem path for tls two-way authentication, only takes effect when “secure” is true | - |
spring.ai.vectorstore.milvus.client.ca-pem-path | The ca.pem path for tls two-way authentication, only takes effect when “secure” is true | - |
spring.ai.vectorstore.milvus.client.server-pem-path | server.pem path for tls one-way authentication, only takes effect when “secure” is true. | - |
spring.ai.vectorstore.milvus.client.server-name | Sets the target name override for SSL host name checking, only takes effect when “secure” is True. Note: this value is passed to grpc.ssl_target_name_override | - |
spring.ai.vectorstore.milvus.client.secure | Secure the authorization for this connection, set to True to enable TLS. | false |
spring.ai.vectorstore.milvus.client.idle-timeout-ms | Idle timeout value of client channel. The timeout value must be larger than zero. | 24h |
spring.ai.vectorstore.milvus.client.username | The username and password for this connection. | root |
spring.ai.vectorstore.milvus.client.password | The password for this connection. | milvus |
=== |
启动 Milvus 存储
在 src/test/resources/
目录下运行:
docker-compose up
清理环境:
docker-compose down; rm -Rf ./volumes
然后向量存储连接地址:http://localhost:19530, 管理地址:http://localhost:9001 (用户:minioadmin
,传递:minioadmin
)
故障排除
如果 Docker 抱怨资源不足,则执行:
docker system prune --all --force --volumes
最后编辑:Jeebiz 更新时间:2024-07-06 19:00