feat: 支持别名查询

1、查询添加别名配置
2、格式化相关类的代码
This commit is contained in:
code2tan 2024-06-06 23:27:00 +08:00
parent 9e154449e5
commit dfcd93c8a3
3 changed files with 33 additions and 14 deletions

View File

@ -1,10 +1,12 @@
package org.dromara.milvus.plus.core.conditions;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.util.Iterator;
import java.util.NoSuchElementException;
@EqualsAndHashCode(callSuper = true)
@Data
public abstract class AbstractChainWrapper<T> extends ConditionBuilder<T>{
protected static class ArrayIterator<T> implements Iterator<T> {

View File

@ -13,6 +13,7 @@ import io.milvus.v2.service.vector.response.SearchResp;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.dromara.milvus.plus.cache.ConversionCache;
import org.dromara.milvus.plus.converter.SearchRespConverter;
import org.dromara.milvus.plus.core.FieldFunction;
@ -35,6 +36,7 @@ public class LambdaQueryWrapper<T> extends AbstractChainWrapper<T> implements Wr
private List<String> outputFields;
private Class<T> entityType;
private String collectionName;
private String collectionAlias;
private List<String> partitionNames = new ArrayList<>();
private String annsField;
@ -60,6 +62,17 @@ public class LambdaQueryWrapper<T> extends AbstractChainWrapper<T> implements Wr
}
/**
* 添加集合别名
*
* @param collectionAlias 别名
* @return this
*/
public LambdaQueryWrapper<T> alias(String collectionAlias) {
this.collectionAlias = collectionAlias;
return this;
}
public LambdaQueryWrapper<T> partition(String... partitionName) {
this.partitionNames.addAll(Arrays.asList(partitionName));
return this;
@ -417,7 +430,7 @@ public class LambdaQueryWrapper<T> extends AbstractChainWrapper<T> implements Wr
*/
private SearchReq buildSearch() {
SearchReq.SearchReqBuilder<?, ?> builder = SearchReq.builder()
.collectionName(collectionName);
.collectionName(StringUtils.isNotBlank(collectionAlias) ? collectionAlias : collectionName);
if (annsField != null && !annsField.isEmpty()) {
builder.annsField(annsField);
@ -456,15 +469,15 @@ public class LambdaQueryWrapper<T> extends AbstractChainWrapper<T> implements Wr
public QueryReq buildQuery() {
QueryReq.QueryReqBuilder<?, ?> builder = QueryReq.builder()
.collectionName(collectionName);
.collectionName(StringUtils.isNotBlank(collectionAlias) ? collectionAlias : collectionName);
String filterStr = buildFilters();
if (filterStr != null && !filterStr.isEmpty()) {
if (StringUtils.isNotBlank(filterStr)) {
builder.filter(filterStr);
}
if (topK > 0) {
builder.limit(topK);
}
if (limit > 0) {
if (limit > 0L) {
builder.limit(limit);
}
if (!CollectionUtils.isEmpty(partitionNames)) {
@ -481,6 +494,7 @@ public class LambdaQueryWrapper<T> extends AbstractChainWrapper<T> implements Wr
/**
* 执行搜索
*
* @return 搜索响应对象
*/
public MilvusResp<List<MilvusResult<T>>> query() throws MilvusException {
@ -496,6 +510,7 @@ public class LambdaQueryWrapper<T> extends AbstractChainWrapper<T> implements Wr
return SearchRespConverter.convertGetRespToMilvusResp(query, entityType);
}
}
public MilvusResp<List<MilvusResult<T>>> query(FieldFunction<T, ?>... outputFields) throws MilvusException {
List<String> otf = new ArrayList<>();
for (FieldFunction<T, ?> outputField : outputFields) {
@ -504,10 +519,12 @@ public class LambdaQueryWrapper<T> extends AbstractChainWrapper<T> implements Wr
this.outputFields = otf;
return query();
}
public MilvusResp<List<MilvusResult<T>>> query(String... outputFields) throws MilvusException {
this.outputFields = Arrays.stream(outputFields).collect(Collectors.toList());
return query();
}
public MilvusResp<List<MilvusResult<T>>> getById(Serializable... ids) {
GetReq.GetReqBuilder<?, ?> builder = GetReq.builder()
.collectionName(collectionName)
@ -515,12 +532,12 @@ public class LambdaQueryWrapper<T> extends AbstractChainWrapper<T> implements Wr
if (!CollectionUtils.isEmpty(partitionNames)) {
builder.partitionName(partitionNames.get(0));
}
GetReq getReq = builder
.build();
GetReq getReq = builder.build();
GetResp getResp = client.get(getReq);
return SearchRespConverter.convertGetRespToMilvusResp(getResp, entityType);
}
@Override
public void init(String collectionName, MilvusClientV2 client, ConversionCache conversionCache, Class<T> entityType) {
setClient(client);

View File

@ -64,7 +64,7 @@ public class ApplicationRunnerTest implements ApplicationRunner {
List<Float> vector = IntStream.range(0, 128)
.mapToObj(i -> (float) (Math.random() * 100))
.collect(Collectors.toList());
MilvusResp<List<MilvusResult<Face>>> query1 = mapper.queryWrapper()
MilvusResp<List<MilvusResult<Face>>> query1 = mapper.queryWrapper().alias("alias_face")
.vector(Face::getFaceVector, vector)
.like(Face::getPersonName, "张三")
.topK(3)