1. pom
xml
<!-- Vector Store for RAG -->
<dependency>
<groupId>org.springframework.ai</groupId>
<artifactId>spring-ai-starter-vector-store-elasticsearch</artifactId>
<exclusions>
<exclusion>
<groupId>co.elastic.clients</groupId>
<artifactId>elasticsearch-java</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 与自己的es版本对应 -->
<dependency>
<groupId>co.elastic.clients</groupId>
<artifactId>elasticsearch-java</artifactId>
<version>8.18.8</version>
</dependency>
2. yaml
yaml
spring:
dashscope:
api-key: sk-4xxx
# 生成"结构化大输出/工具调用多轮"时,默认读超时过短会触发 timeout
# 单位为毫秒(Integer),按需调整
# 连接建立超时(毫秒)
connect-timeout: 30000
read-timeout: 1200000
embedding:
options:
model: text-embedding-v3
3. EsRagConfig 配置类
java
import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.springframework.ai.embedding.EmbeddingModel;
import org.springframework.ai.embedding.TokenCountBatchingStrategy;
import org.springframework.ai.vectorstore.VectorStore;
import org.springframework.ai.vectorstore.elasticsearch.ElasticsearchVectorStore;
import org.springframework.ai.vectorstore.elasticsearch.ElasticsearchVectorStoreOptions;
import org.springframework.ai.vectorstore.elasticsearch.SimilarityFunction;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@Configuration
public class EsRagConfig {
@Bean
public RestClient restClient() {
return RestClient.builder(new HttpHost("localhost", 9200, "http")) // 配置 ES 地址和端口
.build();
}
@Bean
public VectorStore vectorStore(RestClient restClient, EmbeddingModel dashscopeEmbeddingModel) {
ElasticsearchVectorStoreOptions options = new ElasticsearchVectorStoreOptions();
options.setIndexName("testRag"); // 设置索引名称
options.setSimilarity(SimilarityFunction.cosine);
options.setDimensions(1024); // 设置向量维度
return ElasticsearchVectorStore.builder(restClient, dashscopeEmbeddingModel)
.options(options)
.initializeSchema(true) // 没有索引时自动创建索引
.batchingStrategy(new TokenCountBatchingStrategy())
.build();
}
}
然后就可以看官网示例进行rag相关操作了比如:
java
// 向量搜索
vectorStore.similaritySearch(
SearchRequest.builder()
.query(userQuestion)
.topK(topK)
.similarityThreshold(0.3)
.build()
)