mirror of
https://gitee.com/dromara/MilvusPlus.git
synced 2025-12-06 17:08:27 +08:00
commit
80eb9abb55
@ -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>
|
||||
```
|
||||
|
||||
|
||||
@ -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>
|
||||
```
|
||||
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -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();
|
||||
|
||||
@ -9,4 +9,5 @@ public class MilvusResult<T> {
|
||||
private T entity;
|
||||
private Float distance;
|
||||
private Object id;
|
||||
private Long total;
|
||||
}
|
||||
|
||||
@ -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>
|
||||
|
||||
@ -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));
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user