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();
    }

 

posted @ 2022-05-11 14:26  未确定  阅读(7948)  评论(0编辑  收藏  举报