From dc97568fe17728aa4aad3a4cf4d57ca5081ee77a Mon Sep 17 00:00:00 2001 From: xgc Date: Wed, 23 Oct 2024 20:25:13 +0800 Subject: [PATCH 1/2] =?UTF-8?q?=E6=B7=BB=E5=8A=A0count=E6=9F=A5=E8=AF=A2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dromara/milvus/demo/java/JavaTest.java | 2 +- .../plus/converter/SearchRespConverter.java | 19 ++++ .../core/conditions/LambdaQueryWrapper.java | 19 ++++ .../milvus/plus/model/vo/MilvusResult.java | 1 + .../milvus/demo/ApplicationRunnerTest.java | 90 +++++++++++++------ 5 files changed, 101 insertions(+), 30 deletions(-) diff --git a/milvus-core-demo/src/main/java/org/dromara/milvus/demo/java/JavaTest.java b/milvus-core-demo/src/main/java/org/dromara/milvus/demo/java/JavaTest.java index 1817e3d..d543a04 100644 --- a/milvus-core-demo/src/main/java/org/dromara/milvus/demo/java/JavaTest.java +++ b/milvus-core-demo/src/main/java/org/dromara/milvus/demo/java/JavaTest.java @@ -17,7 +17,7 @@ public class JavaTest { MilvusProperties properties=new MilvusProperties(); properties.setEnable(true); properties.setUri("https://in03-a5357975ab80da7.api.gcp-us-west1.zillizcloud.com"); - properties.setToken("xxx"); + properties.setToken("6fab5641a3156d2666feba14390e4ef4b6d376b5dce91faed303eec91a4bdb82239b70b29eb252b981daa3170516245818d4ee12"); properties.setPackages(Lists.newArrayList("io.github.javpower.milvus.demo.model")); MilvusClientBuild build = new MilvusClientBuild(properties); build.initialize(); diff --git a/milvus-plus-core/src/main/java/org/dromara/milvus/plus/converter/SearchRespConverter.java b/milvus-plus-core/src/main/java/org/dromara/milvus/plus/converter/SearchRespConverter.java index d8c671e..9ffdd4d 100644 --- a/milvus-plus-core/src/main/java/org/dromara/milvus/plus/converter/SearchRespConverter.java +++ b/milvus-plus-core/src/main/java/org/dromara/milvus/plus/converter/SearchRespConverter.java @@ -72,6 +72,11 @@ public class SearchRespConverter { List queryResults = getResp.getQueryResults(); return convertQuery(queryResults, entityType); } + public static MilvusResp convertGetRespToCount(QueryResp getResp) { + // 从QueryResp中提取查询结果 + List queryResults = getResp.getQueryResults(); + return convertQueryCount(queryResults); + } /** * 将Get响应转换为Milvus响应的通用方法。 @@ -130,4 +135,18 @@ public class SearchRespConverter { milvusResp.setSuccess(true); return milvusResp; } + private static MilvusResp convertQueryCount(List getResults){ + // 初始化转换缓存和属性缓存,用于帮助将查询结果映射到Java实体 + Long total= 0L; + // 遍历每个查询结果,映射到对应的Java实体 + for (QueryResp.QueryResult queryResult : getResults) { + Map entityMap = queryResult.getEntity(); + total = (Long) entityMap.get("count(*)"); + } + // 构建并返回一个包含转换结果的MilvusResp对象,标记操作成功 + MilvusResp milvusResp = new MilvusResp<>(); + milvusResp.setData(total); + milvusResp.setSuccess(true); + return milvusResp; + } } diff --git a/milvus-plus-core/src/main/java/org/dromara/milvus/plus/core/conditions/LambdaQueryWrapper.java b/milvus-plus-core/src/main/java/org/dromara/milvus/plus/core/conditions/LambdaQueryWrapper.java index 05c3557..eb5928d 100644 --- a/milvus-plus-core/src/main/java/org/dromara/milvus/plus/core/conditions/LambdaQueryWrapper.java +++ b/milvus-plus-core/src/main/java/org/dromara/milvus/plus/core/conditions/LambdaQueryWrapper.java @@ -825,6 +825,7 @@ public class LambdaQueryWrapper extends AbstractChainWrapper implements Wr ); } + public MilvusResp>> query(FieldFunction... outputFields) throws MilvusException { List otf = new ArrayList<>(); for (FieldFunction outputField : outputFields) { @@ -834,6 +835,24 @@ public class LambdaQueryWrapper extends AbstractChainWrapper implements Wr return query(); } + public MilvusResp count() throws MilvusException { + this.outputFields = new ArrayList<>(); + this.outputFields.add("count(*)"); + return executeWithRetry( + () -> { + QueryReq queryReq = buildQuery(); + log.info("Build Query param--> {}", GsonUtil.toJson(queryReq)); + QueryResp queryResp = client.query(queryReq); + return SearchRespConverter.convertGetRespToCount(queryResp); + }, + "collection not loaded", + maxRetries, + entityType, + client + ); + + } + public MilvusResp>> query(String... outputFields) throws MilvusException { this.outputFields = Arrays.stream(outputFields).collect(Collectors.toList()); return query(); diff --git a/milvus-plus-core/src/main/java/org/dromara/milvus/plus/model/vo/MilvusResult.java b/milvus-plus-core/src/main/java/org/dromara/milvus/plus/model/vo/MilvusResult.java index 15981e0..6de4e9a 100644 --- a/milvus-plus-core/src/main/java/org/dromara/milvus/plus/model/vo/MilvusResult.java +++ b/milvus-plus-core/src/main/java/org/dromara/milvus/plus/model/vo/MilvusResult.java @@ -9,4 +9,5 @@ public class MilvusResult { private T entity; private Float distance; private Object id; + private Long total; } diff --git a/milvus-spring-demo/src/main/java/org/dromara/milvus/demo/ApplicationRunnerTest.java b/milvus-spring-demo/src/main/java/org/dromara/milvus/demo/ApplicationRunnerTest.java index 1c5e6f8..7374a04 100644 --- a/milvus-spring-demo/src/main/java/org/dromara/milvus/demo/ApplicationRunnerTest.java +++ b/milvus-spring-demo/src/main/java/org/dromara/milvus/demo/ApplicationRunnerTest.java @@ -1,10 +1,10 @@ package org.dromara.milvus.demo; -import com.alibaba.fastjson.JSONObject; import com.google.common.collect.Lists; -import io.milvus.v2.service.vector.request.data.FloatVec; import io.milvus.v2.service.vector.request.ranker.RRFRanker; +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.dromara.milvus.demo.model.Face; import org.dromara.milvus.demo.model.FaceMilvusMapper; @@ -12,6 +12,9 @@ import org.dromara.milvus.demo.model.Person; import org.dromara.milvus.plus.core.conditions.LambdaQueryWrapper; import org.dromara.milvus.plus.model.vo.MilvusResp; import org.dromara.milvus.plus.model.vo.MilvusResult; +import org.dromara.milvus.plus.service.MilvusService; +import org.dromara.milvus.plus.util.GsonUtil; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.stereotype.Component; @@ -25,20 +28,45 @@ import java.util.stream.LongStream; @Slf4j public class ApplicationRunnerTest implements ApplicationRunner { private final FaceMilvusMapper mapper; + @Autowired + private MilvusService milvusService; public ApplicationRunnerTest(FaceMilvusMapper mapper) { this.mapper = mapper; } @Override - public void run(ApplicationArguments args) { - insertFace(); + public void run(ApplicationArguments args) throws InterruptedException { +// insertFace(); +// selectFace(12); +// selectFace(11); +// delFace(11); +// Thread.sleep(10000); + countFace(22); // getByIdTest(); - vectorQuery(); - // scalarQuery(); - // update(); +// vectorQuery(); +// scalarQuery(); +// update(); } + private void selectFace(Integer temp){ + MilvusResp>> query = mapper. + queryWrapper() + .eq(Face::getTemp, temp) + .query(Face::getPersonName,Face::getTemp); + log.info("query temp 11--{}", GsonUtil.toJson(query)); + } + private void countFace(Integer temp){ + MilvusResp query = mapper. + queryWrapper() + .eq(Face::getTemp, temp) + .count(); + log.info("query temp 11--{}", GsonUtil.toJson(query)); + } + private void delFace(Integer temp){ + MilvusResp remove = mapper.deleteWrapper().eq(Face::getTemp, temp).remove(); + log.info("del temp 11 --{}", GsonUtil.toJson(remove)); + } private void insertFace() { List faces = LongStream.range(1, 10) .mapToObj(i -> { @@ -54,20 +82,24 @@ public class ApplicationRunnerTest implements ApplicationRunner { person.setAge((int) (i*100)); person.setImages(Lists.newArrayList("https://baidu.com")); faceTmp.setPerson(person); + faceTmp.setTemp(i%2==0?11:22); return faceTmp; }) .collect(Collectors.toList()); - //新增 - MilvusResp insert = mapper.insertWrapper() - .partition("face_001") - .insert(faces.iterator()); - log.info("insert--{}", JSONObject.toJSONString(insert)); + MilvusResp insert = milvusService.insert(faces); + +// //新增 +// MilvusResp insert = mapper.insertWrapper() +// .partition("face_001") +// .insert(faces.iterator()); + log.info("insert--{}", GsonUtil.toJson(insert)); } public void getByIdTest() { //id查询 - MilvusResp>> query = mapper.getById(9L); - log.info("query--getById---{}", JSONObject.toJSONString(query)); +// MilvusResp>> query = mapper.getById(9L); + MilvusResp>> query = milvusService.getById(Face.class, 9L); + log.info("query--getById---{}", GsonUtil.toJson(query)); } public void vectorQuery() { @@ -83,16 +115,15 @@ public class ApplicationRunnerTest implements ApplicationRunner { // .like(Face::getPersonName, "张三") // .topK(3) // .query(); -// log.info("向量查询 query--queryWrapper---{}", JSONObject.toJSONString(query1)); +// log.info("向量查询 query--queryWrapper---{}", GsonUtil.toJson(query1)); MilvusResp>> query = mapper.queryWrapper(). - hybrid(new LambdaQueryWrapper().vector(Face::getFaceVector, new FloatVec(vector)).topK(2)). - hybrid(new LambdaQueryWrapper().vector(Face::getFaceVector, new FloatVec(vector1)).topK(4)). + hybrid(new LambdaQueryWrapper().vector(Face::getFaceVector, vector).like(Face::getPersonName, "张三").topK(2)). + hybrid(new LambdaQueryWrapper().vector(Face::getFaceVector, vector1).topK(4)). ranker(new RRFRanker(20)). topK(2). query(); - log.info("向量混合查询 query--queryWrapper---{}", JSONObject.toJSONString(query)); - + log.info("向量混合查询 query--queryWrapper---{}", GsonUtil.toJson(query)); } public void scalarQuery() { @@ -102,16 +133,17 @@ public class ApplicationRunnerTest implements ApplicationRunner { .jsonContains("person_info[\"images\"]","https://baidu.com") .limit(3L) .query(); - log.info("标量查询 query--queryWrapper---{}", JSONObject.toJSONString(query2)); + log.info("标量查询 query--queryWrapper---{}", GsonUtil.toJson(query2)); } -// public void update(){ -// Face faceTmp = new Face(); -// List vectorTmp = IntStream.range(0, 128) -// .mapToObj(j -> (float) (Math.random() * 100)) -// .collect(Collectors.toList()); -// faceTmp.setFaceVector(vectorTmp); -// faceTmp.setPersonName("赵六"); + public void update(){ + Face faceTmp = new Face(); + List vectorTmp = IntStream.range(0, 128) + .mapToObj(j -> (float) (Math.random() * 100)) + .collect(Collectors.toList()); + faceTmp.setFaceVector(vectorTmp); + faceTmp.setPersonName("赵六"); + MilvusResp resp = milvusService.updateById(faceTmp); // MilvusResp resp = mapper.updateWrapper().eq(FaceConstants.PERSON_NAME,"张三").update(faceTmp); -// System.out.printf("===="+ JSON.toJSONString(resp)); -// } + System.out.printf("===="+ GsonUtil.toJson(resp)); + } } \ No newline at end of file From 2077fb9bbc56975cd15cef075cd3a347bf47f1ce Mon Sep 17 00:00:00 2001 From: xgc Date: Wed, 23 Oct 2024 20:30:17 +0800 Subject: [PATCH 2/2] =?UTF-8?q?=E5=8F=91=E7=89=882.1.5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.cn.md | 6 +++--- README.md | 6 +++--- milvus-plus-parent/pom.xml | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/README.cn.md b/README.cn.md index dbb0ecb..77a4a1f 100644 --- a/README.cn.md +++ b/README.cn.md @@ -31,7 +31,7 @@ org.dromara milvus-plus-core - 2.1.4 + 2.1.5 ``` @@ -41,7 +41,7 @@ Spring应用支持: org.dromara milvus-plus-boot-starter - 2.1.4 + 2.1.5 ``` @@ -51,7 +51,7 @@ Solon应用支持: org.dromara milvus-plus-solon-plugin - 2.1.4 + 2.1.5 ``` diff --git a/README.md b/README.md index 8268c34..eda7c40 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ Custom extension support: org.dromara milvus-plus-core - 2.1.4 + 2.1.5 ``` @@ -39,7 +39,7 @@ Spring application support: org.dromara milvus-plus-boot-starter - 2.1.4 + 2.1.5 ``` @@ -49,7 +49,7 @@ Solon application support: org.dromara milvus-plus-solon-plugin - 2.1.4 + 2.1.5 ``` diff --git a/milvus-plus-parent/pom.xml b/milvus-plus-parent/pom.xml index f4cc5c6..198cfc0 100644 --- a/milvus-plus-parent/pom.xml +++ b/milvus-plus-parent/pom.xml @@ -30,7 +30,7 @@ - 2.1.4 + 2.1.5 ${java.version} ${java.version} 3.11.0