向量数据库是一种专用类型的数据库,在AI应用中发挥着至关重要的作用。在向量数据库中,查询方式与传统关系型数据库不同。它们不进行精确匹配,而是执行相似性搜索。当提供一个向量作为查询时,向量数据库会返回与该查询向量“相似”的向量。
一、向量数据库
SpringAI支持很多种向量数据库,使用起来都比较简单根据官网加入依赖设置配置就可以了。
- Azure 向量搜索- 这是Azure向量存储。
- Apache Cassandra- 这是Apache Cassandra向量存储。
- Chroma 向量存储- 这是Chroma向量存储。
- Elasticsearch 向量存储- 这是Elasticsearch向量存储。
- GemFire 向量存储- 这是GemFire的向量存储。
- MariaDB 向量存储- 这是MariaDB的向量存储。
- Milvus 向量存储- 这是Milvus的向量存储。
- MongoDB Atlas 向量存储- 这是MongoDB Atlas的向量存储。
- Neo4j 向量存储- 这是Neo4j的向量存储。
- OpenSearch 向量存储- 这是OpenSearch的向量存储。
- Oracle 向量存储- 这是Oracle 数据库的向量存储。
- PgVector 存储-PostgreSQL/PGVector向量存储。
- Pinecone 向量存储 - Pinecone向量存储。
- Qdrant 向量存储 - Qdrant向量存储。
- Redis 向量存储- 这是Redis向量存储。
- Typesense 向量存储- 这是Typesense向量存储。
- Weaviate 向量存储- 这是Weaviate的向量存储。
- S3 向量存储- 这是AWS S3的向量存储。
- SimpleVectorStore - 向量存储的简单实现,仅适用于测试用途。
参考文档:https://docs.spring.io/spring-ai/reference/api/vectordbs.html
二、简单例子
这里用SimpleVectorStore做个简单例子,是内存实现的,不用启动客户端
1、依赖
<dependency><groupId>org.springframework.ai</groupId><artifactId>spring-ai-vector-store</artifactId></dependency>
2、bean
@Beanpublic SimpleVectorStore vectorStore(OpenAiEmbeddingModel embeddingModel) {return SimpleVectorStore.builder(embeddingModel).build();}
4、使用
@Autowiredprivate SimpleVectorStore vectorStore;@GetMapping("/v")public String v(){//加入向量数据库中vectorStore.doAdd(List.of(new Document("我爱java"),new Document("我爱php"),new Document("我爱JavaScript"),new Document("我爱小猫咪")));//相似度查询List<Document> documents = vectorStore.similaritySearch(SearchRequest.builder().query("开发语言")//要查询的结果.topK(2)//最多返回两个.build());for(Document document :documents){System.out.println("document:"+document);}return "ok";}
日志
2026-11-04T21:39:30.808+08:00 INFO 8408 --- [spring-ai-test] [nio-8080-exec-1] o.s.ai.vectorstore.SimpleVectorStore : Calling EmbeddingModel for document id = cc4ab97a-80bd-42dc-b16e-fa0b08df515a2026-11-04T21:39:31.757+08:00 INFO 8408 --- [spring-ai-test] [nio-8080-exec-1] o.s.ai.vectorstore.SimpleVectorStore : Calling EmbeddingModel for document id = 2e582aca-59fe-4bf7-8ab7-48da6943991a2026-11-04T21:39:31.905+08:00 INFO 8408 --- [spring-ai-test] [nio-8080-exec-1] o.s.ai.vectorstore.SimpleVectorStore : Calling EmbeddingModel for document id = d43d24a9-682a-4f05-99ea-43510e1b94092026-11-04T21:39:32.074+08:00 INFO 8408 --- [spring-ai-test] [nio-8080-exec-1] o.s.ai.vectorstore.SimpleVectorStore : Calling EmbeddingModel for document id = 25622fff-046b-4c25-b188-0eb7539b1acddocument:Document{id='cc4ab97a-80bd-42dc-b16e-fa0b08df515a', text='我爱java', media='null', metadata={distance=0.6221694598406258}, score=0.3778305401593743}document:Document{id='d43d24a9-682a-4f05-99ea-43510e1b9409', text='我爱JavaScript', media='null', metadata={distance=0.626568186855931}, score=0.37343181314406904}
根据日志可以看到四句文字转成了向量,然后查询也符合预期返回了两条跟开发语言相关的内容。
