From 18cbdd9b5599028cb6fad00c94f3a42fff252793 Mon Sep 17 00:00:00 2001 From: xgc Date: Tue, 14 May 2024 22:24:34 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0solon=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- milvus-plus-core/pom.xml | 2 +- milvus-plus-solon-starter/.gitignore | 29 +++++++ milvus-plus-solon-starter/pom.xml | 70 ++++++++++++++++ .../java/io/github/javpower/solon/App.java | 11 +++ .../github/javpower/solon/DemoController.java | 79 +++++++++++++++++++ .../solon/entity/MilvusProperties.java | 25 ++++++ .../javpower/solon/mapper/MilvusMapper.java | 14 ++++ .../javpower/solon/service/MilvusInit.java | 40 ++++++++++ .../javpower/solon/test/model/Face.java | 38 +++++++++ .../solon/test/test/FaceMilvusMapper.java | 11 +++ .../src/main/resources/app.yml | 13 +++ .../src/main/resources/application.yml | 2 +- 12 files changed, 332 insertions(+), 2 deletions(-) create mode 100755 milvus-plus-solon-starter/.gitignore create mode 100755 milvus-plus-solon-starter/pom.xml create mode 100755 milvus-plus-solon-starter/src/main/java/io/github/javpower/solon/App.java create mode 100755 milvus-plus-solon-starter/src/main/java/io/github/javpower/solon/DemoController.java create mode 100644 milvus-plus-solon-starter/src/main/java/io/github/javpower/solon/entity/MilvusProperties.java create mode 100644 milvus-plus-solon-starter/src/main/java/io/github/javpower/solon/mapper/MilvusMapper.java create mode 100644 milvus-plus-solon-starter/src/main/java/io/github/javpower/solon/service/MilvusInit.java create mode 100644 milvus-plus-solon-starter/src/main/java/io/github/javpower/solon/test/model/Face.java create mode 100644 milvus-plus-solon-starter/src/main/java/io/github/javpower/solon/test/test/FaceMilvusMapper.java create mode 100755 milvus-plus-solon-starter/src/main/resources/app.yml diff --git a/milvus-plus-core/pom.xml b/milvus-plus-core/pom.xml index 0ec4536..ee08b11 100644 --- a/milvus-plus-core/pom.xml +++ b/milvus-plus-core/pom.xml @@ -6,7 +6,7 @@ milvus-plus-core 2.4.0-SNAPSHOT milvus-plus-core - a tool about milvus-plus + a tool about milvus-plus-core https://github.com/javpower/milvus-plus diff --git a/milvus-plus-solon-starter/.gitignore b/milvus-plus-solon-starter/.gitignore new file mode 100755 index 0000000..cf2a19c --- /dev/null +++ b/milvus-plus-solon-starter/.gitignore @@ -0,0 +1,29 @@ +target/ +!.mvn/wrapper/maven-wrapper.jar + +### STS ### +.apt_generated +.classpath +.factorypath +.project +.settings +.springBeans + +### IntelliJ IDEA ### +.idea +*.iws +*.iml +*.ipr +*.log +*.flattened-pom.xml + +### NetBeans ### +nbproject/private/ +build/ +nbbuild/ +dist/ +nbdist/ +.nb-gradle/ + +### Mac files ### +*.DS_Store \ No newline at end of file diff --git a/milvus-plus-solon-starter/pom.xml b/milvus-plus-solon-starter/pom.xml new file mode 100755 index 0000000..e5bccc5 --- /dev/null +++ b/milvus-plus-solon-starter/pom.xml @@ -0,0 +1,70 @@ + + + 4.0.0 + + + org.noear + solon-parent + 2.7.6 + + + + io.github.javpower + milvus-plus-solon-starter + 1.0 + + jar + + milvus-plus-solon-starter + + + 1.8 + + + + + io.github.javpower + milvus-plus-core + 2.4.0-SNAPSHOT + + + org.noear + solon-web + + + + org.noear + solon.logging.logback + + + + org.noear + solon-test + test + + + + + ${project.artifactId} + + + + org.noear + solon-maven-plugin + + + + + + + tencent + https://mirrors.cloud.tencent.com/nexus/repository/maven-public/ + + false + + + + + \ No newline at end of file diff --git a/milvus-plus-solon-starter/src/main/java/io/github/javpower/solon/App.java b/milvus-plus-solon-starter/src/main/java/io/github/javpower/solon/App.java new file mode 100755 index 0000000..c3fa580 --- /dev/null +++ b/milvus-plus-solon-starter/src/main/java/io/github/javpower/solon/App.java @@ -0,0 +1,11 @@ +package io.github.javpower.solon; + +import org.noear.solon.Solon; +import org.noear.solon.annotation.SolonMain; + +@SolonMain +public class App { + public static void main(String[] args) { + Solon.start(App.class, args); + } +} \ No newline at end of file diff --git a/milvus-plus-solon-starter/src/main/java/io/github/javpower/solon/DemoController.java b/milvus-plus-solon-starter/src/main/java/io/github/javpower/solon/DemoController.java new file mode 100755 index 0000000..29bd46f --- /dev/null +++ b/milvus-plus-solon-starter/src/main/java/io/github/javpower/solon/DemoController.java @@ -0,0 +1,79 @@ +package io.github.javpower.solon; + +import com.alibaba.fastjson.JSONObject; +import io.github.javpower.milvus.plus.model.vo.MilvusResp; +import io.github.javpower.milvus.plus.model.vo.MilvusResult; +import io.github.javpower.solon.test.model.Face; +import io.github.javpower.solon.test.test.FaceMilvusMapper; +import io.milvus.v2.service.vector.response.DeleteResp; +import io.milvus.v2.service.vector.response.InsertResp; +import io.milvus.v2.service.vector.response.UpsertResp; +import lombok.extern.slf4j.Slf4j; +import org.noear.solon.annotation.Controller; +import org.noear.solon.annotation.Get; +import org.noear.solon.annotation.Inject; +import org.noear.solon.annotation.Mapping; + +import java.util.ArrayList; +import java.util.List; + +@Controller +@Slf4j +public class DemoController { + @Inject + FaceMilvusMapper mapper; + @Mapping("/test") + @Get + public void hello() { + Face face=new Face(); + List vector = new ArrayList<>(); + for (int i = 0; i < 128; i++) { + vector.add((float) (Math.random() * 100)); // 这里仅作为示例使用随机数 + } + face.setPersonId(1l); + face.setFaceVector(vector); + //新增 + List faces=new ArrayList<>(); + for (int i = 1; i < 10 ;i++){ + Face face1=new Face(); + face1.setPersonId(Long.valueOf(i)); + List vector1 = new ArrayList<>(); + for (int j = 0; j < 128; j++) { + vector1.add((float) (Math.random() * 100)); // 这里仅作为示例使用随机数 + } + face1.setFaceVector(vector1); + faces.add(face1); + } + MilvusResp insert = mapper.insert(faces.toArray(faces.toArray(new Face[0]))); log.info("insert--{}", JSONObject.toJSONString(insert)); + //id查询 + MilvusResp>> query = mapper.getById(9l); + log.info("query--getById---{}", JSONObject.toJSONString(query)); + //向量查询 + MilvusResp>> query1 = mapper.queryWrapper() + .vector(Face::getFaceVector, vector) + .ne(Face::getPersonId, 1L) + .topK(3) + .query(); + log.info("向量查询 query--queryWrapper---{}", JSONObject.toJSONString(query1)); + //标量查询 + MilvusResp>> query2 = mapper.queryWrapper() + .eq(Face::getPersonId, 2L) + .topK(3) + .query(); + log.info("标量查询 query--queryWrapper---{}", JSONObject.toJSONString(query2)); + //更新 + vector.clear(); + for (int i = 0; i < 128; i++) { + vector.add((float) (Math.random() * 100)); // 这里仅作为示例使用随机数 + } + MilvusResp update = mapper.updateById(face);log.info("update--{}", JSONObject.toJSONString(update)); + //id查询 + MilvusResp>> query3 = mapper.getById(1L);log.info("query--getById---{}", JSONObject.toJSONString(query3)); + //删除 + MilvusResp remove = mapper.removeById(1L);log.info("remove--{}", JSONObject.toJSONString(remove)); + //查询 + MilvusResp>> query4 = mapper.getById(1L);log.info("query--{}", JSONObject.toJSONString(query4)); + + + } +} \ No newline at end of file diff --git a/milvus-plus-solon-starter/src/main/java/io/github/javpower/solon/entity/MilvusProperties.java b/milvus-plus-solon-starter/src/main/java/io/github/javpower/solon/entity/MilvusProperties.java new file mode 100644 index 0000000..fdcbaf2 --- /dev/null +++ b/milvus-plus-solon-starter/src/main/java/io/github/javpower/solon/entity/MilvusProperties.java @@ -0,0 +1,25 @@ +package io.github.javpower.solon.entity; + + + +import lombok.Data; +import org.noear.solon.annotation.Component; +import org.noear.solon.annotation.Inject; + +import java.util.List; + +/** + * @author xgc + **/ +@Data +@Component +public class MilvusProperties { + @Inject("${milvus.enable}") + private boolean enable; + @Inject("${milvus.uri}") + private String uri; + @Inject("${milvus.token}") + private String token; + @Inject("${milvus.packages}") + private List packages; +} \ No newline at end of file diff --git a/milvus-plus-solon-starter/src/main/java/io/github/javpower/solon/mapper/MilvusMapper.java b/milvus-plus-solon-starter/src/main/java/io/github/javpower/solon/mapper/MilvusMapper.java new file mode 100644 index 0000000..601dd2f --- /dev/null +++ b/milvus-plus-solon-starter/src/main/java/io/github/javpower/solon/mapper/MilvusMapper.java @@ -0,0 +1,14 @@ +package io.github.javpower.solon.mapper; + +import io.github.javpower.milvus.plus.core.mapper.BaseMilvusMapper; +import io.github.javpower.solon.service.MilvusInit; +import io.milvus.v2.client.MilvusClientV2; + + +public class MilvusMapper extends BaseMilvusMapper { + + @Override + public MilvusClientV2 getClient() { + return MilvusInit.client; + } +} diff --git a/milvus-plus-solon-starter/src/main/java/io/github/javpower/solon/service/MilvusInit.java b/milvus-plus-solon-starter/src/main/java/io/github/javpower/solon/service/MilvusInit.java new file mode 100644 index 0000000..895a36e --- /dev/null +++ b/milvus-plus-solon-starter/src/main/java/io/github/javpower/solon/service/MilvusInit.java @@ -0,0 +1,40 @@ +package io.github.javpower.solon.service; + +import io.github.javpower.milvus.plus.service.AbstractMilvusClientBuilder; +import io.github.javpower.solon.entity.MilvusProperties; +import io.milvus.v2.client.MilvusClientV2; +import org.noear.solon.annotation.Component; +import org.noear.solon.annotation.Init; +import org.noear.solon.annotation.Inject; +import org.noear.solon.core.bean.LifecycleBean; +import org.springframework.beans.BeanUtils; + +@Component +public class MilvusInit extends AbstractMilvusClientBuilder implements LifecycleBean { + + + public static MilvusClientV2 client; + @Inject + MilvusProperties milvusProperties; + + // Spring会调用这个方法来初始化client + @Init + public void initialize() { + io.github.javpower.milvus.plus.model.MilvusProperties milvusProperties1=new io.github.javpower.milvus.plus.model.MilvusProperties(); + BeanUtils.copyProperties(milvusProperties,milvusProperties1); + super.setProperties(milvusProperties1); + super.initialize(); + client = getClient(); + } + + @Override + public void start() throws Throwable { + + } + + @Override + public void stop() throws Throwable { + super.close(); + LifecycleBean.super.stop(); + } +} \ No newline at end of file diff --git a/milvus-plus-solon-starter/src/main/java/io/github/javpower/solon/test/model/Face.java b/milvus-plus-solon-starter/src/main/java/io/github/javpower/solon/test/model/Face.java new file mode 100644 index 0000000..6161a82 --- /dev/null +++ b/milvus-plus-solon-starter/src/main/java/io/github/javpower/solon/test/model/Face.java @@ -0,0 +1,38 @@ +package io.github.javpower.solon.test.model; + +import io.github.javpower.milvus.plus.annotation.ExtraParam; +import io.github.javpower.milvus.plus.annotation.MilvusCollection; +import io.github.javpower.milvus.plus.annotation.MilvusField; +import io.github.javpower.milvus.plus.annotation.MilvusIndex; +import io.milvus.v2.common.DataType; +import io.milvus.v2.common.IndexParam; +import lombok.Data; + +import java.util.List; + +@Data +@MilvusCollection(name = "face_collection") // 指定Milvus集合的名称 +public class Face { + @MilvusField( + name = "person_id", // 字段名称 + dataType = DataType.Int64, // 数据类型为64位整数 + isPrimaryKey = true, // 标记为主键 + autoID = false // 假设这个ID是自动生成的 + ) + private Long personId; // 人员的唯一标识符 + + @MilvusField( + name = "face_vector", // 字段名称 + dataType = DataType.FloatVector, // 数据类型为浮点型向量 + dimension = 128 // 向量维度,假设人脸特征向量的维度是128 + ) + @MilvusIndex( + indexType = IndexParam.IndexType.IVF_FLAT, // 使用IVF_FLAT索引类型 + metricType = IndexParam.MetricType.L2, // 使用L2距离度量类型 + indexName = "face_index", // 索引名称 + extraParams = { // 指定额外的索引参数 + @ExtraParam(key = "nlist", value = "100") // 例如,IVF的nlist参数 + } + ) + private List faceVector; // 存储人脸特征的向量 +} \ No newline at end of file diff --git a/milvus-plus-solon-starter/src/main/java/io/github/javpower/solon/test/test/FaceMilvusMapper.java b/milvus-plus-solon-starter/src/main/java/io/github/javpower/solon/test/test/FaceMilvusMapper.java new file mode 100644 index 0000000..69298af --- /dev/null +++ b/milvus-plus-solon-starter/src/main/java/io/github/javpower/solon/test/test/FaceMilvusMapper.java @@ -0,0 +1,11 @@ +package io.github.javpower.solon.test.test; + + +import io.github.javpower.solon.mapper.MilvusMapper; +import io.github.javpower.solon.test.model.Face; +import org.noear.solon.annotation.Component; + +@Component +public class FaceMilvusMapper extends MilvusMapper { + +} diff --git a/milvus-plus-solon-starter/src/main/resources/app.yml b/milvus-plus-solon-starter/src/main/resources/app.yml new file mode 100755 index 0000000..33532f6 --- /dev/null +++ b/milvus-plus-solon-starter/src/main/resources/app.yml @@ -0,0 +1,13 @@ +server.port: 8880 + +solon.app: + name: 'milvus-plus-solon' + group: 'milvus' + + +milvus: + uri: https://in03-a5357975ab80da7.api.gcp-us-west1.zillizcloud.com + token: xxx + enable: true + packages: + - io.github.javpower.solon.test.model \ No newline at end of file diff --git a/milvus-spring-demo/src/main/resources/application.yml b/milvus-spring-demo/src/main/resources/application.yml index db3139c..91c36a6 100644 --- a/milvus-spring-demo/src/main/resources/application.yml +++ b/milvus-spring-demo/src/main/resources/application.yml @@ -3,7 +3,7 @@ server: milvus: uri: https://in03-a5357975ab80da7.api.gcp-us-west1.zillizcloud.com - token: XXXx + token: 6fab5641a3156d2666feba14390e4ef4b6d376b5dce91faed303eec91a4bdb82239b70b29eb252b981daa3170516245818d4ee12 enable: true packages: - io.github.javpower.milvus.demo.model \ No newline at end of file