mirror of
https://gitee.com/dromara/easy-es.git
synced 2025-12-06 09:09:13 +08:00
fix(boot,core,spring): bug修复
1.springboot配置文件增加es7和8调整的属性 2.手动排序字段自动转驼峰 3.根据mapper创建/删除索引时缓存导致索引名错误问题修复 4.es8中高亮分词会调用first()导致查询结果异常修复 5.mapper扫描根据环境变量设置问题,当@MapperEsScan或者spring xml的basePackage没有设置时取环境变量,
This commit is contained in:
parent
f5ac2ffabb
commit
47647aa60e
@ -12,6 +12,12 @@
|
||||
"description": "是否开启easy-es LOGO BANNER的打印.",
|
||||
"type": "java.lang.Boolean"
|
||||
},
|
||||
{
|
||||
"defaultValue": false,
|
||||
"name": "easy-es.compatible",
|
||||
"description": "是否开启兼容性(超低版本的es, 比如7.0.0开启该特性).",
|
||||
"type": "java.lang.Boolean"
|
||||
},
|
||||
{
|
||||
"defaultValue": "127.0.0.1:9200",
|
||||
"name": "easy-es.address",
|
||||
|
||||
@ -94,6 +94,15 @@ public interface BaseEsMapper<T> {
|
||||
*/
|
||||
Boolean deleteIndex(String... indexNames);
|
||||
|
||||
/**
|
||||
* 删除当前mapper索引,无需传递索引名
|
||||
* @return {@link Boolean} 是否成功
|
||||
* @author MoJie
|
||||
*/
|
||||
default Boolean deleteIndex() {
|
||||
return this.deleteIndex(EntityInfoHelper.getIndexName(this.getEntityClass()));
|
||||
}
|
||||
|
||||
/**
|
||||
* 刷新索引
|
||||
*
|
||||
|
||||
@ -102,9 +102,7 @@ public class BaseEsMapperImpl<T> implements BaseEsMapper<T> {
|
||||
|
||||
@Override
|
||||
public Boolean createIndex() {
|
||||
EntityInfo entityInfo = EntityInfoHelper.getEntityInfo(entityClass);
|
||||
CreateIndexParam createIndexParam = IndexUtils.getCreateIndexParam(entityInfo, entityClass);
|
||||
return IndexUtils.createIndex(client, entityInfo, createIndexParam);
|
||||
return createIndex(EntityInfoHelper.getIndexName(entityClass));
|
||||
}
|
||||
|
||||
@Override
|
||||
@ -164,8 +162,13 @@ public class BaseEsMapperImpl<T> implements BaseEsMapper<T> {
|
||||
@Override
|
||||
@SneakyThrows
|
||||
public String executeSQL(String sql) {
|
||||
// 如果是下划线转驼峰,ee帮助处理
|
||||
if (GlobalConfigCache.getGlobalConfig().getDbConfig().isMapUnderscoreToCamelCase()) {
|
||||
sql = StringUtils.camelToUnderline(sql);
|
||||
}
|
||||
PrintUtils.printSql(sql);
|
||||
QueryResponse response = client.sql().query(x -> x.query(sql).format("json"));
|
||||
String finalSql = sql;
|
||||
QueryResponse response = client.sql().query(x -> x.query(finalSql).format("json"));
|
||||
return JsonpUtils.toString(response, new StringBuilder()).toString();
|
||||
}
|
||||
|
||||
|
||||
@ -622,8 +622,14 @@ public class WrapperProcessor {
|
||||
// 设置以String形式指定的自定义排序字段及规则(此类排序通常由前端传入,满足部分用户个性化需求)
|
||||
if (CollectionUtils.isNotEmpty(wrapper.orderByParams)) {
|
||||
wrapper.orderByParams.forEach(orderByParam -> {
|
||||
// 排序字段名
|
||||
String orderColumn = orderByParam.getOrder();
|
||||
// 获取配置是否开启了驼峰转换
|
||||
if (GlobalConfigCache.getGlobalConfig().getDbConfig().isMapUnderscoreToCamelCase()) {
|
||||
orderColumn = StringUtils.camelToUnderline(orderColumn);
|
||||
}
|
||||
// 设置排序字段
|
||||
FieldSort.Builder fieldSortBuilder = new FieldSort.Builder().field(orderByParam.getOrder());
|
||||
FieldSort.Builder fieldSortBuilder = new FieldSort.Builder().field(orderColumn);
|
||||
|
||||
// 设置排序规则
|
||||
if (SortOrder.Asc.toString().equalsIgnoreCase(orderByParam.getSort())) {
|
||||
|
||||
@ -374,6 +374,7 @@ public class EntityInfoHelper {
|
||||
if (dbConfig.isMapUnderscoreToCamelCase()) {
|
||||
realHighLightField = StringUtils.camelToUnderline(realHighLightField);
|
||||
}
|
||||
// 如果字段没有参与条件查询,则不进行高亮设置
|
||||
addHighlightParam(entityInfo, nestedOrObjectClass, highLight, realHighLightField, mappingField);
|
||||
|
||||
MultiIndexField multiIndexField = field.getAnnotation(MultiIndexField.class);
|
||||
@ -413,6 +414,11 @@ public class EntityInfoHelper {
|
||||
.setHighLightField(realHighLightField)
|
||||
.setHighLightType(highLight.highLightType())
|
||||
.setRequireFieldMatch(highLight.requireFieldMatch());
|
||||
// 多级高亮 合并高亮结果时,尝试调用 first() 方法
|
||||
// 如果是pinyin那么进行高亮降级,否则会出现first() should not be called in this context异常
|
||||
if (realHighLightField.endsWith(".pinyin")) {
|
||||
highlightParam.setHighLightType(HighLightTypeEnum.PLAIN);
|
||||
}
|
||||
if (MINUS_ONE != highLight.numberOfFragments() && highLight.numberOfFragments() > ZERO) {
|
||||
highlightParam.setNumberOfFragments(highLight.numberOfFragments());
|
||||
}
|
||||
@ -694,6 +700,31 @@ public class EntityInfoHelper {
|
||||
return ReflectionKit.getFieldList(ClassUtils.getUserClass(clazz));
|
||||
}
|
||||
|
||||
/**
|
||||
* 根据类获取索引名
|
||||
* @param clazz 实体
|
||||
* @return {@link String}
|
||||
* @author MoJie
|
||||
*/
|
||||
public static String getIndexName(Class<?> clazz) {
|
||||
String tablePrefix = GlobalConfigCache.getGlobalConfig().getDbConfig().getIndexPrefix();
|
||||
IndexName table = clazz.getAnnotation(IndexName.class);
|
||||
boolean tablePrefixEffect = true;
|
||||
String indexName = clazz.getSimpleName().toLowerCase(Locale.ROOT);
|
||||
if (table != null) {
|
||||
if (StringUtils.isNotBlank(table.value())) {
|
||||
indexName = table.value();
|
||||
if (StringUtils.isNotBlank(tablePrefix) && !table.keepGlobalPrefix()) {
|
||||
tablePrefixEffect = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (StringUtils.isNotBlank(tablePrefix) && tablePrefixEffect) {
|
||||
indexName = tablePrefix + indexName;
|
||||
}
|
||||
return indexName;
|
||||
}
|
||||
|
||||
/**
|
||||
* 初始化索引名等信息
|
||||
*
|
||||
|
||||
@ -3,6 +3,7 @@ package org.dromara.easyes.spring;
|
||||
import lombok.Setter;
|
||||
import org.dromara.easyes.common.utils.EEVersionUtils;
|
||||
import org.dromara.easyes.common.utils.LogUtils;
|
||||
import org.dromara.easyes.common.utils.StringUtils;
|
||||
import org.dromara.easyes.spring.config.ClassPathMapperScanner;
|
||||
import org.springframework.beans.BeansException;
|
||||
import org.springframework.beans.PropertyValue;
|
||||
@ -63,7 +64,10 @@ public class MapperScannerConfigurer
|
||||
}
|
||||
PropertyValues values = mapperScannerBean.getPropertyValues();
|
||||
// 如果在环境变量中取扫描的包,需要从easy-es.mappers进行取值,与mybatis配置mapper相似,但这里不做配置推荐
|
||||
this.basePackage = getPropertyValue("easy-es.mappers", values);
|
||||
String propertyValue = getPropertyValue("easy-es.mappers", values);
|
||||
if (StringUtils.isNotBlank(propertyValue)) {
|
||||
this.basePackage = propertyValue;
|
||||
}
|
||||
}
|
||||
|
||||
// 取变量
|
||||
|
||||
@ -1,5 +1,6 @@
|
||||
package org.dromara.easyes.spring.annotation;
|
||||
|
||||
import org.dromara.easyes.common.constants.BaseEsConstants;
|
||||
import org.dromara.easyes.common.utils.LogUtils;
|
||||
import org.dromara.easyes.spring.MapperScannerConfigurer;
|
||||
import org.springframework.beans.factory.config.BeanDefinition;
|
||||
@ -12,6 +13,7 @@ import org.springframework.core.env.Environment;
|
||||
import org.springframework.core.type.AnnotationMetadata;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
@ -36,9 +38,10 @@ public class MapperScannerRegister implements ImportBeanDefinitionRegistrar, Env
|
||||
public void registerBeanDefinitions(AnnotationMetadata importingClassMetadata, BeanDefinitionRegistry registry) {
|
||||
AnnotationAttributes mapperScanAttrs = AnnotationAttributes
|
||||
.fromMap(importingClassMetadata.getAnnotationAttributes(EsMapperScan.class.getName()));
|
||||
List<String> basePackages = new ArrayList<>();
|
||||
// 默认已注解标记为主,如果没有则尝试寻找easy-es配置 scan
|
||||
if (mapperScanAttrs != null) {
|
||||
List<String> basePackages = Arrays.stream(mapperScanAttrs.getStringArray("value"))
|
||||
basePackages = Arrays.stream(mapperScanAttrs.getStringArray("value"))
|
||||
.filter(StringUtils::hasText)
|
||||
.map(map -> {
|
||||
// 判断是否需要处理${}变量
|
||||
@ -50,6 +53,15 @@ public class MapperScannerRegister implements ImportBeanDefinitionRegistrar, Env
|
||||
return map;
|
||||
})
|
||||
.collect(Collectors.toList());
|
||||
} else {
|
||||
// 如果在环境变量中取扫描的包,需要从easy-es.mappers进行取值,与mybatis配置mapper相似,但这里不做配置推荐
|
||||
String propertyValue = this.environment.getProperty("easy-es.mappers", String.class, BaseEsConstants.EMPTY_STR);
|
||||
if (org.dromara.easyes.common.utils.StringUtils.isNotBlank(propertyValue)) {
|
||||
basePackages = Arrays.asList(propertyValue.split(COMMA));
|
||||
}
|
||||
}
|
||||
// 如果扫描的包不为空,则进行mapperInterface的注册
|
||||
if (!basePackages.isEmpty()) {
|
||||
// 注册bean
|
||||
registerBeanDefinitions(registry, generateBaseBeanName(importingClassMetadata),
|
||||
StringUtils.toStringArray(basePackages));
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user