ElasticSearch 使用 BoolQueryBuilder 模糊查询 与 不区分大小写,多个中文失效
1 ES 搜索姓名,支持模糊搜索并且不区分大小写
说明一下版本
spring-boot 2.6.3
elasticsearch 7.15.2
使用客户端为
elasticsearchRestTemplate
使用的构造器为
BoolQueryBuilder queryWrapper = QueryBuilders.boolQuery();
//模糊搜索+不区分大小写 boolQuery.must(QueryBuilders.wildcardQuery("s_cst_full_name", ("*"+name.toLowerCase(Locale.ROOT)+"*")));
wildcardQuery
es 提供的 模糊搜索方法,使用跟mysql 的 * 通配符类似
name 就是你的参数入参,后面加上 toLowerCase(Locale.ROOT) 就能实现 不区分大小写。
这个不区分大小写,根绝es 设置可能会产生不同情况,看网上好多都是 设置什么。这只提供一个可行的方法。
08.10 更新
突然发现,全中文查询失效了.
后查询,是分词的影响。后来修改代码。
全中文的采用
match_phrase 方法。英文数字采用。
但是带来的效率会影响,然后分词的不彻底。还有遗留问题。中英文 数字交杂又查不出了。
/** * 判断字符串中是否全是中文 * * @param str 待校验字符串 * @return 是否全是中文 */ public static boolean isAllChinese(String str) { if (str == null) { return false; } Pattern p = Pattern.compile("[\u4e00-\u9fa5]+"); Matcher m = p.matcher(str); return m.matches(); }