mirror of
https://gitee.com/dromara/MilvusPlus.git
synced 2025-12-06 17:08:27 +08:00
!13 MilvusCollection注解支持配置别名
Merge pull request !13 from GhostGuest/future-alias-support
This commit is contained in:
commit
3178dede4f
@ -15,4 +15,9 @@ public @interface MilvusCollection {
|
||||
* 集合的名称
|
||||
*/
|
||||
String name();
|
||||
|
||||
/**
|
||||
*
|
||||
*/
|
||||
String[] alias() default {};
|
||||
}
|
||||
@ -48,11 +48,12 @@ public class MilvusConverter {
|
||||
return cache.getMilvusEntity();
|
||||
}
|
||||
MilvusEntity milvus = new MilvusEntity();
|
||||
// 获取实体类上的@MilvusCollection注解,校验其存在性
|
||||
// 集合名称
|
||||
MilvusCollection collectionAnnotation = entityClass.getAnnotation(MilvusCollection.class);
|
||||
if (Objects.isNull(collectionAnnotation)) {
|
||||
throw new IllegalArgumentException("Entity must be annotated with @MilvusCollection");
|
||||
}
|
||||
// 分区信息
|
||||
MilvusPartition milvusPartition = entityClass.getAnnotation(MilvusPartition.class);
|
||||
if (Objects.nonNull(milvusPartition)) {
|
||||
String[] name = milvusPartition.name();
|
||||
@ -60,9 +61,14 @@ public class MilvusConverter {
|
||||
} else {
|
||||
milvus.setPartitionName(Lists.newArrayList());
|
||||
}
|
||||
// 从注解中读取集合(表)名称
|
||||
|
||||
// 集合名称
|
||||
String collectionName = collectionAnnotation.name();
|
||||
milvus.setCollectionName(collectionName);
|
||||
// 集合别名
|
||||
if (collectionAnnotation.alias().length > 0) {
|
||||
milvus.setAlias(Arrays.asList(collectionAnnotation.alias()));
|
||||
}
|
||||
// 初始化字段列表和索引参数列表
|
||||
List<AddFieldReq> milvusFields = new ArrayList<>();
|
||||
List<IndexParam> indexParams = new ArrayList<>();
|
||||
@ -175,11 +181,12 @@ public class MilvusConverter {
|
||||
}
|
||||
return original.substring(0, 1).toUpperCase() + original.substring(1);
|
||||
}
|
||||
public static void create(MilvusEntity milvusEntity, MilvusClientV2 client){
|
||||
List<IndexParam> indexParams = milvusEntity.getIndexParams();
|
||||
if(indexParams==null||indexParams.isEmpty()){
|
||||
throw new IllegalArgumentException("the index does not exist, please define the index");
|
||||
}
|
||||
|
||||
public static void create(MilvusEntity milvusEntity, MilvusClientV2 client) {
|
||||
List<IndexParam> indexParams = milvusEntity.getIndexParams();
|
||||
if (indexParams == null || indexParams.isEmpty()) {
|
||||
throw new IllegalArgumentException("the index does not exist, please define the index");
|
||||
}
|
||||
// 创建新集合
|
||||
CollectionSchemaBuilder schemaBuilder = new CollectionSchemaBuilder(
|
||||
milvusEntity.getCollectionName(), client
|
||||
|
||||
@ -5,12 +5,14 @@ import io.milvus.v2.service.collection.request.AddFieldReq;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author xgc
|
||||
**/
|
||||
@Data
|
||||
public class MilvusEntity {
|
||||
private String collectionName;
|
||||
private List<String> alias;
|
||||
private List<IndexParam> indexParams;
|
||||
private List<AddFieldReq> milvusFields;
|
||||
private List<String> partitionName;
|
||||
|
||||
@ -3,10 +3,14 @@ package org.dromara.milvus.plus.service;
|
||||
import io.milvus.v2.client.ConnectConfig;
|
||||
import io.milvus.v2.client.MilvusClientV2;
|
||||
import io.milvus.v2.service.collection.request.ReleaseCollectionReq;
|
||||
import io.milvus.v2.service.utility.response.ListAliasResp;
|
||||
import lombok.Setter;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.dromara.milvus.plus.annotation.MilvusCollection;
|
||||
import org.dromara.milvus.plus.cache.CollectionToPrimaryCache;
|
||||
import org.dromara.milvus.plus.converter.MilvusConverter;
|
||||
import org.dromara.milvus.plus.model.MilvusEntity;
|
||||
import org.dromara.milvus.plus.model.MilvusProperties;
|
||||
import org.springframework.core.io.Resource;
|
||||
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
|
||||
@ -48,7 +52,7 @@ public abstract class AbstractMilvusClientBuilder implements MilvusClientBuilder
|
||||
@Override
|
||||
public void close() throws InterruptedException {
|
||||
if (client != null) {
|
||||
//释放集合+释放client
|
||||
// 释放集合+释放client
|
||||
Set<String> co = CollectionToPrimaryCache.collectionToPrimary.keySet();
|
||||
if (!co.isEmpty()) {
|
||||
for (String name : co) {
|
||||
@ -77,7 +81,7 @@ public abstract class AbstractMilvusClientBuilder implements MilvusClientBuilder
|
||||
return client;
|
||||
}
|
||||
|
||||
//获取指定包下实体类
|
||||
// 获取指定包下实体类
|
||||
private List<Class<?>> getClass(List<String> packages) {
|
||||
ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();
|
||||
return Optional.ofNullable(packages)
|
||||
@ -107,10 +111,30 @@ public abstract class AbstractMilvusClientBuilder implements MilvusClientBuilder
|
||||
.collect(Collectors.toList());
|
||||
}
|
||||
|
||||
//缓存 + 是否构建集合
|
||||
// 缓存 + 是否构建集合
|
||||
public void performBusinessLogic(List<Class<?>> annotatedClasses) {
|
||||
for (Class<?> milvusClass : annotatedClasses) {
|
||||
createCollection(milvusClass);
|
||||
MilvusEntity milvusEntity = MilvusConverter.convert(milvusClass);
|
||||
createCollection(milvusEntity);
|
||||
aliasProcess(milvusEntity);
|
||||
}
|
||||
}
|
||||
|
||||
private void aliasProcess(MilvusEntity milvusEntity) {
|
||||
if (StringUtils.isBlank(milvusEntity.getCollectionName()) || milvusEntity.getAlias().isEmpty()) {
|
||||
return;
|
||||
}
|
||||
ListAliasResp listAliasResp = listAliases(milvusEntity);
|
||||
Optional.ofNullable(listAliasResp)
|
||||
.ifPresent(aliasInfo -> {
|
||||
// 获取不存在的别名
|
||||
List<String> aliasList = milvusEntity.getAlias().stream()
|
||||
.filter(e -> !aliasInfo.getAlias().contains(e))
|
||||
.filter(StringUtils::isNotBlank)
|
||||
.collect(Collectors.toList());
|
||||
log.info("processing alias: {}", aliasList);
|
||||
milvusEntity.setAlias(aliasList);
|
||||
createAlias(milvusEntity);
|
||||
});
|
||||
}
|
||||
}
|
||||
@ -11,6 +11,11 @@ import io.milvus.v2.service.index.request.DescribeIndexReq;
|
||||
import io.milvus.v2.service.index.request.DropIndexReq;
|
||||
import io.milvus.v2.service.index.response.DescribeIndexResp;
|
||||
import io.milvus.v2.service.partition.request.*;
|
||||
import io.milvus.v2.service.utility.request.AlterAliasReq;
|
||||
import io.milvus.v2.service.utility.request.CreateAliasReq;
|
||||
import io.milvus.v2.service.utility.request.DropAliasReq;
|
||||
import io.milvus.v2.service.utility.request.ListAliasesReq;
|
||||
import io.milvus.v2.service.utility.response.ListAliasResp;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.dromara.milvus.plus.builder.CollectionSchemaBuilder;
|
||||
import org.dromara.milvus.plus.converter.MilvusConverter;
|
||||
@ -423,5 +428,52 @@ public interface ICMService {
|
||||
releasePartitions(collectionName, Collections.singletonList(partitionName));
|
||||
}
|
||||
|
||||
/**
|
||||
* create aliases
|
||||
*/
|
||||
default void createAlias(MilvusEntity milvusEntity) {
|
||||
MilvusClientV2 client = getClient();
|
||||
for (String alias : milvusEntity.getAlias()) {
|
||||
CreateAliasReq createAliasReq = CreateAliasReq.builder().alias(alias)
|
||||
.collectionName(milvusEntity.getCollectionName()).build();
|
||||
client.createAlias(createAliasReq);
|
||||
}
|
||||
}
|
||||
|
||||
default void createAlias(Class<?> milvusClass) {
|
||||
MilvusEntity milvusEntity = MilvusConverter.convert(milvusClass);
|
||||
createAlias(milvusEntity);
|
||||
}
|
||||
|
||||
/**
|
||||
* drop aliases
|
||||
*/
|
||||
default void dropAlias(MilvusEntity milvusEntity) {
|
||||
MilvusClientV2 client = getClient();
|
||||
for (String alias : milvusEntity.getAlias()) {
|
||||
client.dropAlias(DropAliasReq.builder().alias(alias).build());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* alter aliases
|
||||
*/
|
||||
default void alterAlias(MilvusEntity milvusEntity) {
|
||||
MilvusClientV2 client = getClient();
|
||||
for (String alias : milvusEntity.getAlias()) {
|
||||
client.alterAlias(AlterAliasReq.builder()
|
||||
.collectionName(milvusEntity.getCollectionName())
|
||||
.alias(alias).build());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* list aliases
|
||||
*
|
||||
* @return List<String> alias names
|
||||
*/
|
||||
default ListAliasResp listAliases(MilvusEntity milvusEntity) {
|
||||
MilvusClientV2 client = getClient();
|
||||
return client.listAliases(ListAliasesReq.builder().collectionName(milvusEntity.getCollectionName()).build());
|
||||
}
|
||||
}
|
||||
|
||||
@ -8,8 +8,8 @@ import org.dromara.milvus.plus.annotation.*;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@MilvusCollection(name = "face_collection") // 指定Milvus集合的名称
|
||||
@MilvusPartition(name = {"face_001","face_002"})
|
||||
@MilvusCollection(name = "face_collection", alias = {"alias_face"})
|
||||
@MilvusPartition(name = {"face_001", "face_002"})
|
||||
public class Face {
|
||||
@MilvusField(
|
||||
name = "person_id", // 字段名称
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user