向量数据库
向量数据库专门用于存储、管理和检索向量嵌入,这些向量嵌入是高维空间中数据点(如文本、图像或音频)的数字表示。 它们在相似性搜索中至关重要,使应用程序能够根据语义相似性而不是精确匹配来查找相似的项目。 Spring AI 提供了VectorStore 抽象,用于与各种向量数据库产品进行交互。
VectorStore 接口
VectorStore 接口定义了用于与向量数据库交互的核心操作:
void add(List<Document> documents): 将文档列表添加到向量存储中。在添加之前,每个文档的内容都会被转换为向量嵌入。Optional<Boolean> delete(List<String> idList): 从向量存储中删除由其 ID 标识的文档列表。List<Document> similaritySearch(String query): 对给定查询执行相似性搜索,并返回最相似的文档列表。List<Document> similaritySearch(SearchRequest request): 使用更详细的SearchRequest(允许指定 top K、相似性阈值和元数据过滤器)执行相似性搜索。
SearchRequest
SearchRequest 类封装了相似性搜索查询的参数:
String query: 用于相似性搜索的查询字符串。int topK: 要返回的最相似文档的数量 (默认为 4)。double similarityThreshold: 相似性得分阈值 (0 到 1)。仅返回得分高于或等于此阈值的文档 (默认为 0.0)。FilterExpression filterExpression: 用于在搜索期间根据元数据过滤文档的过滤器表达式。
元数据过滤
Spring AI 支持使用FilterExpression 进行元数据过滤。这允许您根据文档元数据中的条件来优化相似性搜索结果。
FilterExpressionConverter 将 FilterExpression 转换为特定于向量存储的本机过滤器查询格式。
FilterExpressionBuilder
FilterExpressionBuilder 实用程序类可帮助以编程方式构建 FilterExpression 对象。
它支持以下操作:
eq(key, value): 等于 (==)ne(key, value): 不等于 (!=)gt(key, value): 大于 (>)gte(key, value): 大于或等于 (>=)lt(key, value): 小于 (<)lte(key, value): 小于或等于 (<=)in(key, values...): 值在提供的列表中 (IN)nin(key, values...): 值不在提供的列表中 (NIN)
and(left, right): 逻辑与 (AND)or(left, right): 逻辑或 (OR)not(expression): 逻辑非 (NOT)
支持的向量数据库
Spring AI 支持各种向量数据库实现。请参阅侧边栏中的各个文档页面以获取特定于每个数据库的设置说明和详细信息。Azure AI 搜索
Azure Cosmos DB
Apache Cassandra
Chroma
Couchbase
Elasticsearch
GemFire
HANA
MariaDB
Milvus
MongoDB Atlas
Neo4j
OpenSearch
Oracle
PGVector
Pinecone
Qdrant
Redis
Typesense
Weaviate
文档有误?请协助编辑
发现文档问题?点击此处直接在 GitHub 上编辑并提交 PR,帮助我们改进文档!