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.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());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -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";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user