!38 dev to main

Merge pull request !38 from xgc/dev
This commit is contained in:
xgc 2024-10-23 12:31:33 +00:00 committed by Gitee
commit 80eb9abb55
No known key found for this signature in database
GPG Key ID: 173E9B9CA92EEF8F
8 changed files with 108 additions and 37 deletions

View File

@ -31,7 +31,7 @@
<dependency>
<groupId>org.dromara</groupId>
<artifactId>milvus-plus-core</artifactId>
<version>2.1.4</version>
<version>2.1.5</version>
</dependency>
```
@ -41,7 +41,7 @@ Spring应用支持
<dependency>
<groupId>org.dromara</groupId>
<artifactId>milvus-plus-boot-starter</artifactId>
<version>2.1.4</version>
<version>2.1.5</version>
</dependency>
```
@ -51,7 +51,7 @@ Solon应用支持
<dependency>
<groupId>org.dromara</groupId>
<artifactId>milvus-plus-solon-plugin</artifactId>
<version>2.1.4</version>
<version>2.1.5</version>
</dependency>
```

View File

@ -29,7 +29,7 @@ Custom extension support:
<dependency>
<groupId>org.dromara</groupId>
<artifactId>milvus-plus-core</artifactId>
<version>2.1.4</version>
<version>2.1.5</version>
</dependency>
```
@ -39,7 +39,7 @@ Spring application support:
<dependency>
<groupId>org.dromara</groupId>
<artifactId>milvus-plus-boot-starter</artifactId>
<version>2.1.4</version>
<version>2.1.5</version>
</dependency>
```
@ -49,7 +49,7 @@ Solon application support:
<dependency>
<groupId>org.dromara</groupId>
<artifactId>milvus-plus-solon-plugin</artifactId>
<version>2.1.4</version>
<version>2.1.5</version>
</dependency>
```

View File

@ -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();

View File

@ -72,6 +72,11 @@ public class SearchRespConverter {
List<QueryResp.QueryResult> queryResults = getResp.getQueryResults();
return convertQuery(queryResults, entityType);
}
public static MilvusResp<Long> convertGetRespToCount(QueryResp getResp) {
// 从QueryResp中提取查询结果
List<QueryResp.QueryResult> queryResults = getResp.getQueryResults();
return convertQueryCount(queryResults);
}
/**
* 将Get响应转换为Milvus响应的通用方法
@ -130,4 +135,18 @@ public class SearchRespConverter {
milvusResp.setSuccess(true);
return milvusResp;
}
private static MilvusResp<Long> convertQueryCount(List<QueryResp.QueryResult> getResults){
// 初始化转换缓存和属性缓存用于帮助将查询结果映射到Java实体
Long total= 0L;
// 遍历每个查询结果映射到对应的Java实体
for (QueryResp.QueryResult queryResult : getResults) {
Map<String, Object> entityMap = queryResult.getEntity();
total = (Long) entityMap.get("count(*)");
}
// 构建并返回一个包含转换结果的MilvusResp对象标记操作成功
MilvusResp<Long> milvusResp = new MilvusResp<>();
milvusResp.setData(total);
milvusResp.setSuccess(true);
return milvusResp;
}
}

View File

@ -825,6 +825,7 @@ public class LambdaQueryWrapper<T> extends AbstractChainWrapper<T> implements Wr
);
}
public MilvusResp<List<MilvusResult<T>>> query(FieldFunction<T, ?>... outputFields) throws MilvusException {
List<String> otf = new ArrayList<>();
for (FieldFunction<T, ?> outputField : outputFields) {
@ -834,6 +835,24 @@ public class LambdaQueryWrapper<T> extends AbstractChainWrapper<T> implements Wr
return query();
}
public MilvusResp<Long> 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<List<MilvusResult<T>>> query(String... outputFields) throws MilvusException {
this.outputFields = Arrays.stream(outputFields).collect(Collectors.toList());
return query();

View File

@ -9,4 +9,5 @@ public class MilvusResult<T> {
private T entity;
private Float distance;
private Object id;
private Long total;
}

View File

@ -30,7 +30,7 @@
</developer>
</developers>
<properties>
<revision>2.1.4</revision>
<revision>2.1.5</revision>
<maven.compiler.source>${java.version}</maven.compiler.source>
<maven.compiler.target>${java.version}</maven.compiler.target>
<maven-compiler.version>3.11.0</maven-compiler.version>

View File

@ -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<List<MilvusResult<Face>>> 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<Long> query = mapper.
queryWrapper()
.eq(Face::getTemp, temp)
.count();
log.info("query temp 11--{}", GsonUtil.toJson(query));
}
private void delFace(Integer temp){
MilvusResp<DeleteResp> remove = mapper.deleteWrapper().eq(Face::getTemp, temp).remove();
log.info("del temp 11 --{}", GsonUtil.toJson(remove));
}
private void insertFace() {
List<Face> 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<InsertResp> insert = mapper.insertWrapper()
.partition("face_001")
.insert(faces.iterator());
log.info("insert--{}", JSONObject.toJSONString(insert));
MilvusResp<InsertResp> insert = milvusService.insert(faces);
// //新增
// MilvusResp<InsertResp> insert = mapper.insertWrapper()
// .partition("face_001")
// .insert(faces.iterator());
log.info("insert--{}", GsonUtil.toJson(insert));
}
public void getByIdTest() {
//id查询
MilvusResp<List<MilvusResult<Face>>> query = mapper.getById(9L);
log.info("query--getById---{}", JSONObject.toJSONString(query));
// MilvusResp<List<MilvusResult<Face>>> query = mapper.getById(9L);
MilvusResp<List<MilvusResult<Face>>> 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<List<MilvusResult<Face>>> query = mapper.queryWrapper().
hybrid(new LambdaQueryWrapper<Face>().vector(Face::getFaceVector, new FloatVec(vector)).topK(2)).
hybrid(new LambdaQueryWrapper<Face>().vector(Face::getFaceVector, new FloatVec(vector1)).topK(4)).
hybrid(new LambdaQueryWrapper<Face>().vector(Face::getFaceVector, vector).like(Face::getPersonName, "张三").topK(2)).
hybrid(new LambdaQueryWrapper<Face>().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<Float> 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<Float> vectorTmp = IntStream.range(0, 128)
.mapToObj(j -> (float) (Math.random() * 100))
.collect(Collectors.toList());
faceTmp.setFaceVector(vectorTmp);
faceTmp.setPersonName("赵六");
MilvusResp<UpsertResp> resp = milvusService.updateById(faceTmp);
// MilvusResp<UpsertResp> resp = mapper.updateWrapper().eq(FaceConstants.PERSON_NAME,"张三").update(faceTmp);
// System.out.printf("===="+ JSON.toJSONString(resp));
// }
System.out.printf("===="+ GsonUtil.toJson(resp));
}
}