如何在Java中实现Elastic Search大小写不敏感通配符查询?
Elasticsearch Wildcard查询启用大小写不敏感的实现方案
问题描述
现有如下Elasticsearch查询代码:
BoolQueryBuilder paramFilter = QueryBuilders.boolQuery(); paramFilter.must(QueryBuilders.wildcardQuery(field, "*"+key+"*"));
请问如何在此基础上启用caseInsensitive(大小写不敏感)功能?
解决方法
在Elasticsearch的Java客户端中,wildcardQuery提供了直接开启大小写不敏感的参数,只需要在构建查询时链式调用caseInsensitive(true)即可:
BoolQueryBuilder paramFilter = QueryBuilders.boolQuery(); paramFilter.must(QueryBuilders.wildcardQuery(field, "*"+key+"*") .caseInsensitive(true)); // 启用大小写不敏感匹配
补充说明
- 这个参数从Elasticsearch 7.10版本开始支持,如果你的客户端版本低于该版本,需要先升级依赖包。
- 如果追求更高的匹配效率,也可以在创建索引时,把目标字段配置为
lowercase分词器或归一化器,这样索引阶段就统一处理了大小写,查询时无需额外配置也能实现不敏感匹配。
内容的提问来源于stack exchange,提问作者Eejay Taa
相关产品推荐
相关产品推荐

