|
@@ -0,0 +1,91 @@
|
|
|
+/*
|
|
|
+ * Copyright (c) 2025 GaoKunW
|
|
|
+ *
|
|
|
+ */
|
|
|
+
|
|
|
+package org.eco.vip.ai.knowledge.vectorstore;
|
|
|
+
|
|
|
+import io.milvus.v2.client.MilvusClientV2;
|
|
|
+import io.milvus.v2.common.DataType;
|
|
|
+import io.milvus.v2.common.IndexParam;
|
|
|
+import io.milvus.v2.service.collection.request.AddFieldReq;
|
|
|
+import io.milvus.v2.service.collection.request.CreateCollectionReq;
|
|
|
+import io.milvus.v2.service.index.request.CreateIndexReq;
|
|
|
+
|
|
|
+import java.util.Collections;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @author GaoKunW
|
|
|
+ * @description MilvusVectorStore
|
|
|
+ * @date 2025/3/17 00:21
|
|
|
+ */
|
|
|
+public class MilvusVectorStore implements VectorStore {
|
|
|
+
|
|
|
+ private volatile Integer dimension;
|
|
|
+ private volatile String collectionName;
|
|
|
+ private MilvusClientV2 milvusServiceClient;
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public void newSchema(String kid) {
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ private void createSchema(String kid) {
|
|
|
+ CreateCollectionReq.CollectionSchema schema = milvusServiceClient.createSchema();
|
|
|
+
|
|
|
+
|
|
|
+ schema.addField(AddFieldReq.builder()
|
|
|
+ .fieldName("row_id")
|
|
|
+ .description("主键ID")
|
|
|
+ .dataType(DataType.VarChar)
|
|
|
+ .isPrimaryKey(true)
|
|
|
+ .autoID(false)
|
|
|
+ .build());
|
|
|
+ schema.addField(AddFieldReq.builder()
|
|
|
+ .fieldName("content")
|
|
|
+ .description("内容")
|
|
|
+ .dataType(DataType.VarChar)
|
|
|
+ .maxLength(1000)
|
|
|
+ .build());
|
|
|
+ schema.addField(AddFieldReq.builder()
|
|
|
+ .fieldName("kid")
|
|
|
+ .dataType(DataType.VarChar)
|
|
|
+ .isPrimaryKey(true)
|
|
|
+ .maxLength(20)
|
|
|
+ .build());
|
|
|
+ schema.addField(AddFieldReq.builder()
|
|
|
+ .fieldName("docId")
|
|
|
+ .dataType(DataType.VarChar)
|
|
|
+ .maxLength(20)
|
|
|
+ .build());
|
|
|
+ schema.addField(AddFieldReq.builder()
|
|
|
+ .fieldName("fid")
|
|
|
+ .dataType(DataType.VarChar)
|
|
|
+ .maxLength(20)
|
|
|
+ .build());
|
|
|
+ schema.addField(AddFieldReq.builder()
|
|
|
+ .fieldName("fv")
|
|
|
+ .dataType(DataType.FloatVector)
|
|
|
+ .dimension(dimension)
|
|
|
+ .build());
|
|
|
+
|
|
|
+ CreateCollectionReq collectionReq = CreateCollectionReq.builder()
|
|
|
+ .collectionName(collectionName + kid)
|
|
|
+ .description("本地知识库")
|
|
|
+ .collectionSchema(schema)
|
|
|
+ .build();
|
|
|
+ milvusServiceClient.createCollection(collectionReq);
|
|
|
+ IndexParam indexParam = IndexParam.builder()
|
|
|
+ .fieldName("title_vector")
|
|
|
+ .indexType(IndexParam.IndexType.IVF_FLAT)
|
|
|
+ .metricType(IndexParam.MetricType.COSINE)
|
|
|
+ .build();
|
|
|
+ CreateIndexReq createIndexReq = CreateIndexReq.builder()
|
|
|
+ .collectionName("")
|
|
|
+ .indexParams(Collections.singletonList(indexParam))
|
|
|
+ .build();
|
|
|
+ // 创建向量的索引
|
|
|
+ milvusServiceClient.createIndex(createIndexReq);
|
|
|
+
|
|
|
+ }
|
|
|
+}
|