20250412 将数据向量化后插入到milvus集合中
This commit is contained in:
parent
c6e0cab442
commit
2ae4d6e425
@ -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());
|
||||
}
|
||||
}
|
||||
|
@ -17,4 +17,10 @@ public class MilvusController {
|
||||
similarService.createCollection();
|
||||
return "milvus collection create";
|
||||
}
|
||||
|
||||
@RequestMapping("/vector")
|
||||
public String vector() {
|
||||
similarService.insertProducts();
|
||||
return "vector create";
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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<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
|
||||
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<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);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user