20250412 将数据向量化后插入到milvus集合中

This commit is contained in:
liangjinglin 2025-04-12 11:16:44 +08:00
parent c6e0cab442
commit 2ae4d6e425
4 changed files with 85 additions and 0 deletions

View File

@ -3,6 +3,8 @@ package com.ai.config;
import io.milvus.client.MilvusClient; import io.milvus.client.MilvusClient;
import io.milvus.client.MilvusServiceClient; import io.milvus.client.MilvusServiceClient;
import io.milvus.param.ConnectParam; 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.Bean;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
@ -17,4 +19,11 @@ public class MilvusConfig {
.build(); .build();
return new MilvusServiceClient(connectParam); return new MilvusServiceClient(connectParam);
} }
@Bean
public MilvusClientV2 milvusClientV2() {
return new MilvusClientV2(ConnectConfig.builder()
.uri("http://localhost:19530")
.build());
}
} }

View File

@ -17,4 +17,10 @@ public class MilvusController {
similarService.createCollection(); similarService.createCollection();
return "milvus collection create"; return "milvus collection create";
} }
@RequestMapping("/vector")
public String vector() {
similarService.insertProducts();
return "vector create";
}
} }

View File

@ -12,4 +12,12 @@ public class Product {
private String description; private String description;
private String type; private String type;
public Product() {
}
public Product(Long spuId, String type) {
this.spuId = spuId;
this.type = type;
}
} }

View File

@ -1,18 +1,53 @@
package com.ai.service; 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.client.MilvusClient;
import io.milvus.common.utils.JsonUtils;
import io.milvus.grpc.DataType; import io.milvus.grpc.DataType;
import io.milvus.param.collection.CreateCollectionParam; import io.milvus.param.collection.CreateCollectionParam;
import io.milvus.param.collection.FieldType; 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.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.io.ByteArrayInputStream;
import java.util.*;
@Service @Service
public class SimilarService { public class SimilarService {
private static final List<Product> 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 @Autowired
private MilvusClient milvusClient; private MilvusClient milvusClient;
@Autowired
private MilvusClientV2 milvusClientV2;
@Value("${langchain4j.api-key}")
private String apiKey;
public void createCollection(){ public void createCollection(){
//定义字段 //定义字段
FieldType spuId = FieldType.newBuilder() FieldType spuId = FieldType.newBuilder()
@ -35,4 +70,31 @@ public class SimilarService {
milvusClient.createCollection(createParam); milvusClient.createCollection(createParam);
} }
public void insertProducts(){
List<JsonObject> 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<TextSegment> segments = splitter.split(document);
List<Float> vector = embeddingModel.embedAll(segments).content().get(0).vectorAsList();
Map<String, Object> 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);
}
} }