From 822b76689060de9b07d6d3e3e07c47cd1e294128 Mon Sep 17 00:00:00 2001
From: liu <liujiatong112@163.com>
Date: Wed, 10 Jul 2024 14:31:35 +0800
Subject: [PATCH] =?UTF-8?q?=E6=96=B0=E5=A2=9E=E6=A8=A1=E5=9D=97?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 .../src/main/resources/application.yml        |  5 +++
 know_sub_rag/pom.xml                          | 17 ++++++++--
 .../ElasticsearchVectorStoreConfig.java       | 17 +++++++---
 ...gClient.java => VectorEmbeddingModel.java} |  4 +--
 .../knowsub/controller/EsTestController.java  | 33 +++++++++++++++++++
 pom.xml                                       | 19 +++++++++++
 6 files changed, 86 insertions(+), 9 deletions(-)
 rename know_sub_rag/src/main/java/com/supervision/knowsub/config/{VectorEmbeddingClient.java => VectorEmbeddingModel.java} (93%)
 create mode 100644 know_sub_rag/src/main/java/com/supervision/knowsub/controller/EsTestController.java

diff --git a/know_sub_business/src/main/resources/application.yml b/know_sub_business/src/main/resources/application.yml
index 99b2b45..620bc3d 100644
--- a/know_sub_business/src/main/resources/application.yml
+++ b/know_sub_business/src/main/resources/application.yml
@@ -14,6 +14,11 @@ server:
 spring:
   elasticsearch:
     uris: http://192.168.10.137:9200
+  ai:
+    vectorstore:
+      elasticsearch:
+        index-name: 11
+
   main:
     allow-bean-definition-overriding: true
   servlet:
diff --git a/know_sub_rag/pom.xml b/know_sub_rag/pom.xml
index 6a704b5..9f80975 100644
--- a/know_sub_rag/pom.xml
+++ b/know_sub_rag/pom.xml
@@ -25,10 +25,10 @@
             <artifactId>spring-ai-ollama-spring-boot-starter</artifactId>
         </dependency>
 
+
         <dependency>
-            <groupId>io.springboot.ai</groupId>
+            <groupId>org.springframework.ai</groupId>
             <artifactId>spring-ai-elasticsearch-store</artifactId>
-            <version>1.0.3</version>
         </dependency>
 
         <dependency>
@@ -73,6 +73,19 @@
 
     </dependencies>
 
+    <repositories>
+        <repository>
+            <id>spring-milestones</id>
+            <name>Spring Milestones</name>
+            <url>https://repo.spring.io/milestone</url>
+            <snapshots>
+                <enabled>false</enabled>
+            </snapshots>
+        </repository>
+    </repositories>
+
+
+
 
     <build>
         <plugins>
diff --git a/know_sub_rag/src/main/java/com/supervision/knowsub/config/ElasticsearchVectorStoreConfig.java b/know_sub_rag/src/main/java/com/supervision/knowsub/config/ElasticsearchVectorStoreConfig.java
index 5b1f441..7b5cf8e 100644
--- a/know_sub_rag/src/main/java/com/supervision/knowsub/config/ElasticsearchVectorStoreConfig.java
+++ b/know_sub_rag/src/main/java/com/supervision/knowsub/config/ElasticsearchVectorStoreConfig.java
@@ -1,7 +1,10 @@
 package com.supervision.knowsub.config;
 
 import org.elasticsearch.client.RestClient;
+import org.springframework.ai.embedding.EmbeddingClient;
+import org.springframework.ai.embedding.EmbeddingModel;
 import org.springframework.ai.vectorstore.ElasticsearchVectorStore;
+import org.springframework.ai.vectorstore.ElasticsearchVectorStoreOptions;
 import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
 import org.springframework.boot.context.properties.EnableConfigurationProperties;
 import org.springframework.context.annotation.Bean;
@@ -13,15 +16,19 @@ import org.springframework.util.Assert;
 public class ElasticsearchVectorStoreConfig {
 
     @Bean
-//    @ConditionalOnProperty(prefix = "embedding", name = "url")
-    public VectorEmbeddingClient vectorEmbeddingClient(EmbeddingProperties embeddingProperties) {
+    @ConditionalOnProperty(prefix = "embedding", name = "url")
+    public EmbeddingModel embeddingModel(EmbeddingProperties embeddingProperties) {
         Assert.notNull(embeddingProperties.getUrl(), "配置文件embedding:url未找到");
-        return new VectorEmbeddingClient(embeddingProperties.getUrl());
+        return new VectorEmbeddingModel(embeddingProperties.getUrl());
     }
 
     @Bean
-    public ElasticsearchVectorStore vectorStore(VectorEmbeddingClient embeddingModel, RestClient restClient) {
-        return new ElasticsearchVectorStore(restClient, embeddingModel);
+    @ConditionalOnProperty(prefix = "embedding", name = "url")
+    public ElasticsearchVectorStore vectorStore(EmbeddingModel embeddingModel, RestClient restClient) {
+        ElasticsearchVectorStoreOptions options = new ElasticsearchVectorStoreOptions();
+        options.setIndexName("test_rag");
+        options.setDimensions(1024);
+        return new ElasticsearchVectorStore(options, restClient, embeddingModel, true);
     }
 
 }
diff --git a/know_sub_rag/src/main/java/com/supervision/knowsub/config/VectorEmbeddingClient.java b/know_sub_rag/src/main/java/com/supervision/knowsub/config/VectorEmbeddingModel.java
similarity index 93%
rename from know_sub_rag/src/main/java/com/supervision/knowsub/config/VectorEmbeddingClient.java
rename to know_sub_rag/src/main/java/com/supervision/knowsub/config/VectorEmbeddingModel.java
index 481761e..60b3487 100644
--- a/know_sub_rag/src/main/java/com/supervision/knowsub/config/VectorEmbeddingClient.java
+++ b/know_sub_rag/src/main/java/com/supervision/knowsub/config/VectorEmbeddingModel.java
@@ -14,11 +14,11 @@ import java.util.Map;
 import java.util.concurrent.atomic.AtomicInteger;
 
 @Slf4j
-public class VectorEmbeddingClient extends AbstractEmbeddingClient {
+public class VectorEmbeddingModel implements EmbeddingModel {
 
     private final String embeddingUrl;
 
-    public VectorEmbeddingClient(String embeddingUrl) {
+    public VectorEmbeddingModel(String embeddingUrl) {
         this.embeddingUrl = embeddingUrl;
     }
 
diff --git a/know_sub_rag/src/main/java/com/supervision/knowsub/controller/EsTestController.java b/know_sub_rag/src/main/java/com/supervision/knowsub/controller/EsTestController.java
new file mode 100644
index 0000000..791103d
--- /dev/null
+++ b/know_sub_rag/src/main/java/com/supervision/knowsub/controller/EsTestController.java
@@ -0,0 +1,33 @@
+package com.supervision.knowsub.controller;
+
+import cn.hutool.json.JSONUtil;
+import org.springframework.ai.document.Document;
+import org.springframework.ai.vectorstore.ElasticsearchVectorStore;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.List;
+
+@RestController
+@RequestMapping("esTest")
+public class EsTestController {
+
+    @Autowired
+    private ElasticsearchVectorStore elasticsearchVectorStore;
+
+    @GetMapping("add")
+    public void add(){
+        Document document = new Document("测试测试");
+        elasticsearchVectorStore.add(List.of(document));
+    }
+
+    @GetMapping("search")
+    public void search(){
+        List<Document> result = elasticsearchVectorStore.similaritySearch("");
+        for (Document document : result) {
+            System.out.println(JSONUtil.toJsonStr(document));
+        }
+    }
+}
diff --git a/pom.xml b/pom.xml
index 2236a84..d92d209 100644
--- a/pom.xml
+++ b/pom.xml
@@ -52,6 +52,14 @@
                 <scope>import</scope>
             </dependency>
 
+            <dependency>
+                <groupId>org.springframework.ai</groupId>
+                <artifactId>spring-ai-bom</artifactId>
+                <version>1.0.0-M1</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+
             <dependency>
                 <groupId>mysql</groupId>
                 <artifactId>mysql-connector-java</artifactId>
@@ -112,4 +120,15 @@
         </dependencies>
     </dependencyManagement>
 
+    <repositories>
+        <repository>
+            <id>spring-milestones</id>
+            <name>Spring Milestones</name>
+            <url>https://repo.spring.io/milestone</url>
+            <snapshots>
+                <enabled>false</enabled>
+            </snapshots>
+        </repository>
+    </repositories>
+
 </project>