From 2ae4d6e425f41dc43509953c7887da879ab01601 Mon Sep 17 00:00:00 2001 From: liangjinglin Date: Sat, 12 Apr 2025 11:16:44 +0800 Subject: [PATCH] =?UTF-8?q?20250412=20=E5=B0=86=E6=95=B0=E6=8D=AE=E5=90=91?= =?UTF-8?q?=E9=87=8F=E5=8C=96=E5=90=8E=E6=8F=92=E5=85=A5=E5=88=B0milvus?= =?UTF-8?q?=E9=9B=86=E5=90=88=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/java/com/ai/config/MilvusConfig.java | 9 +++ .../com/ai/controller/MilvusController.java | 6 ++ src/main/java/com/ai/model/Product.java | 8 +++ .../java/com/ai/service/SimilarService.java | 62 +++++++++++++++++++ 4 files changed, 85 insertions(+) diff --git a/src/main/java/com/ai/config/MilvusConfig.java b/src/main/java/com/ai/config/MilvusConfig.java index 0f694b3..0eaca61 100644 --- a/src/main/java/com/ai/config/MilvusConfig.java +++ b/src/main/java/com/ai/config/MilvusConfig.java @@ -3,6 +3,8 @@ package com.ai.config; import io.milvus.client.MilvusClient; import io.milvus.client.MilvusServiceClient; import io.milvus.param.ConnectParam; +import io.milvus.v2.client.ConnectConfig; +import io.milvus.v2.client.MilvusClientV2; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -17,4 +19,11 @@ public class MilvusConfig { .build(); return new MilvusServiceClient(connectParam); } + + @Bean + public MilvusClientV2 milvusClientV2() { + return new MilvusClientV2(ConnectConfig.builder() + .uri("http://localhost:19530") + .build()); + } } diff --git a/src/main/java/com/ai/controller/MilvusController.java b/src/main/java/com/ai/controller/MilvusController.java index 99c8324..c30baea 100644 --- a/src/main/java/com/ai/controller/MilvusController.java +++ b/src/main/java/com/ai/controller/MilvusController.java @@ -17,4 +17,10 @@ public class MilvusController { similarService.createCollection(); return "milvus collection create"; } + + @RequestMapping("/vector") + public String vector() { + similarService.insertProducts(); + return "vector create"; + } } diff --git a/src/main/java/com/ai/model/Product.java b/src/main/java/com/ai/model/Product.java index 3f99543..e1c3139 100644 --- a/src/main/java/com/ai/model/Product.java +++ b/src/main/java/com/ai/model/Product.java @@ -12,4 +12,12 @@ public class Product { private String description; private String type; + + public Product() { + } + + public Product(Long spuId, String type) { + this.spuId = spuId; + this.type = type; + } } diff --git a/src/main/java/com/ai/service/SimilarService.java b/src/main/java/com/ai/service/SimilarService.java index 98e7f3c..36bb1e8 100644 --- a/src/main/java/com/ai/service/SimilarService.java +++ b/src/main/java/com/ai/service/SimilarService.java @@ -1,18 +1,53 @@ package com.ai.service; +import com.ai.model.Product; +import com.google.gson.Gson; +import com.google.gson.JsonObject; +import dev.langchain4j.community.model.dashscope.QwenEmbeddingModel; +import dev.langchain4j.data.document.Document; +import dev.langchain4j.data.document.parser.TextDocumentParser; +import dev.langchain4j.data.document.splitter.DocumentByLineSplitter; +import dev.langchain4j.data.embedding.Embedding; +import dev.langchain4j.data.segment.TextSegment; import io.milvus.client.MilvusClient; +import io.milvus.common.utils.JsonUtils; import io.milvus.grpc.DataType; import io.milvus.param.collection.CreateCollectionParam; import io.milvus.param.collection.FieldType; +import io.milvus.param.dml.InsertParam; +import io.milvus.v2.client.ConnectConfig; +import io.milvus.v2.client.MilvusClientV2; +import io.milvus.v2.service.vector.request.InsertReq; +import io.milvus.v2.service.vector.response.InsertResp; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import java.io.ByteArrayInputStream; +import java.util.*; + @Service public class SimilarService { + private static final List productList = new ArrayList<>(); + + static { + productList.add(new Product(100001l, "数码/电脑/笔记本")); + productList.add(new Product(100002l, "数码/手机/智能手机")); + productList.add(new Product(100003l, "数码/电脑/台式")); + productList.add(new Product(100004l, "饮食/零食/饼干")); + } + @Autowired private MilvusClient milvusClient; + @Autowired + private MilvusClientV2 milvusClientV2; + + @Value("${langchain4j.api-key}") + private String apiKey; + + public void createCollection(){ //定义字段 FieldType spuId = FieldType.newBuilder() @@ -35,4 +70,31 @@ public class SimilarService { milvusClient.createCollection(createParam); } + + public void insertProducts(){ + List dataList = new ArrayList<>(); + TextDocumentParser parser = new TextDocumentParser(); + QwenEmbeddingModel embeddingModel = QwenEmbeddingModel.builder().apiKey(apiKey).build(); + for (Product product : productList){ + ByteArrayInputStream inputStream = new ByteArrayInputStream(product.getType().getBytes()); + Document document = parser.parse(inputStream); + DocumentByLineSplitter splitter = new DocumentByLineSplitter(300,30); + List segments = splitter.split(document); + List vector = embeddingModel.embedAll(segments).content().get(0).vectorAsList(); + Map dataMap = new HashMap<>(); + dataMap.put("spu_id", product.getSpuId()); + dataMap.put("type_vector", vector); + Gson gson = new Gson(); + JsonObject data = gson.fromJson(JsonUtils.toJson(dataMap), JsonObject.class); + dataList.add(data); + System.out.println("======向量化完成======="); + } + + InsertReq ins = InsertReq.builder() + .collectionName("similar_collection") + .data(dataList) + .build(); + InsertResp resp = milvusClientV2.insert(ins); + System.out.println("插入数据成功,返回结果:" + resp); + } }