From af3fe93a602885936b4028313c4da55ebee83f4a Mon Sep 17 00:00:00 2001 From: lym <2499445495@qq.com> Date: Wed, 31 Dec 2025 15:09:33 +0800 Subject: [PATCH] =?UTF-8?q?fix:#IDGV5P=EF=BC=9A=E7=88=B6=E7=B1=BB=E6=9C=AA?= =?UTF-8?q?=E4=BD=BF=E7=94=A8ignoreCase,=E4=BD=86=E5=AD=90=E7=B1=BB?= =?UTF-8?q?=E9=87=8C=E4=BD=BF=E7=94=A8=E4=BA=86=EF=BC=8C=E5=88=9B=E5=BB=BA?= =?UTF-8?q?=E7=B4=A2=E5=BC=95=E6=97=B6=E6=8A=A5=E9=94=99?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../easyes/core/toolkit/EntityInfoHelper.java | 61 ++++++++++++------- 1 file changed, 39 insertions(+), 22 deletions(-) diff --git a/easy-es-core/src/main/java/org/dromara/easyes/core/toolkit/EntityInfoHelper.java b/easy-es-core/src/main/java/org/dromara/easyes/core/toolkit/EntityInfoHelper.java index cfd21b4d..9ebd61fb 100644 --- a/easy-es-core/src/main/java/org/dromara/easyes/core/toolkit/EntityInfoHelper.java +++ b/easy-es-core/src/main/java/org/dromara/easyes/core/toolkit/EntityInfoHelper.java @@ -83,10 +83,10 @@ public class EntityInfoHelper { initIndexName(clazz, globalConfig, entityInfo); // 初始化字段相关 initIndexFields(clazz, globalConfig, entityInfo); - // 初始化索引settings相关 - initSettings(clazz, entityInfo); // 初始化封装@Join父子类型注解信息 initJoin(clazz, globalConfig, entityInfo); + // 初始化索引settings相关 + initSettings(clazz, entityInfo); // 初始化knn插件配置 entityInfo.setEnableKnnPlugin(globalConfig.getDbConfig().isEnableKnnPlugin()); @@ -779,33 +779,50 @@ public class EntityInfoHelper { @SneakyThrows private static void initSettings(Class clazz, EntityInfo entityInfo) { + IndexSettings.Builder builder = new IndexSettings.Builder(); + initIgnoreCase(entityInfo, builder); + Settings settings = clazz.getAnnotation(Settings.class); - if (settings == null) { - return; - } - entityInfo.setMaxResultWindow(settings.maxResultWindow()); - entityInfo.setReplicasNum(settings.replicasNum()); - entityInfo.setShardsNum(settings.shardsNum()); + if (settings != null) { + entityInfo.setMaxResultWindow(settings.maxResultWindow()); + entityInfo.setReplicasNum(settings.replicasNum()); + entityInfo.setShardsNum(settings.shardsNum()); - IndexSettings.Builder builder = new IndexSettings.Builder(); - builder.numberOfReplicas(settings.replicasNum() + "") - .numberOfShards(settings.shardsNum() + "") - .maxResultWindow(settings.maxResultWindow()); + builder.numberOfReplicas(settings.replicasNum() + "") + .numberOfShards(settings.shardsNum() + "") + .maxResultWindow(settings.maxResultWindow()); - if (StringUtils.isNotBlank(settings.refreshInterval())) { - builder.refreshInterval(a -> a.time(settings.refreshInterval())); + if (StringUtils.isNotBlank(settings.refreshInterval())) { + builder.refreshInterval(a -> a.time(settings.refreshInterval())); + } + ISettingsProvider provider = settings.settingsProvider().getDeclaredConstructor().newInstance(); + provider.settings(builder); } + entityInfo.setIndexSettings(builder.build()); + } - ISettingsProvider provider = settings.settingsProvider().getDeclaredConstructor().newInstance(); - provider.settings(builder); + /** + * 如果父类、join子类、嵌套类中有任何一个字段配置了忽略大小写,则在settings.analysis.normalizer中创建lowercase_normalizer,否则无需创建,不浪费资源 + * @param entityInfo + * @param builder + */ + private static void initIgnoreCase(EntityInfo entityInfo, IndexSettings.Builder builder) { + boolean ignoreCase = false; if (CollectionUtils.isNotEmpty(entityInfo.getFieldList())) { - // 只要有其中一个字段加了忽略大小写,则在索引中创建此自定义配置,否则无需创建,不浪费资源 - if (entityInfo.getFieldList().stream().anyMatch(EntityFieldInfo::isIgnoreCase)) { - builder.analysis(b -> b.normalizer(LOWERCASE_NORMALIZER, - c -> c.custom(d -> d.filter(LOWERCASE)))); - } + ignoreCase = entityInfo.getFieldList().stream().anyMatch(EntityFieldInfo::isIgnoreCase); + } + if (!ignoreCase && CollectionUtils.isNotEmpty(entityInfo.getChildFieldList())) { + ignoreCase = entityInfo.getChildFieldList().stream().anyMatch(EntityFieldInfo::isIgnoreCase); + } + if (!ignoreCase && CollectionUtils.isNotEmpty(entityInfo.getNestedOrObjectFieldListMap())) { + ignoreCase = entityInfo.getNestedOrObjectFieldListMap().values() + .stream() + .flatMap(Collection::stream) + .anyMatch(EntityFieldInfo::isIgnoreCase); + } + if (ignoreCase) { + builder.analysis(b -> b.normalizer(LOWERCASE_NORMALIZER, c -> c.custom(d -> d.filter(LOWERCASE)))); } - entityInfo.setIndexSettings(builder.build()); } /** -- Gitee