es模糊查询、分词查询、精确查询

本文深入探讨了Elasticsearch中的精确与模糊查询方法,包括使用WildcardQueryBuilder进行精确查询及BoolQueryBuilder实现分词查询的细节。特别强调了wildcardQuery在不同属性类型下(如text与keyword)的表现差异,为读者提供了实用的查询策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一:es精确查询、模糊查询:

es精确查询使用WildcardQueryBuilder :精确查询和模糊查询的区别是被模糊的字段值是否加匹配符  *、?,*匹配任意多个,?只匹配一个;

 SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
//条件
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
WildcardQueryBuilder wildQueryBuilder = null;
WildcardQueryBuilder wildQueryBuilder2 = null;
 if (!StringUtils.isEmpty(param.getKeyword())) {
            wildQueryBuilder = QueryBuilders.wildcardQuery(
                    "opt_user", "*"+param.getKeyword()+"*");
        }
        if (!StringUtils.isEmpty(param.getTargetModule())) {
            wildQueryBuilder2 = QueryBuilders.wildcardQuery(
                    "target_module", "*"+param.getTargetModule()+"*");
        }
        if(wildQueryBuilder!=null){
            boolQueryBuilder.must(wildQueryBuilder);
        }
        if(wildQueryBuilder2!=null){
            boolQueryBuilder.must(wildQueryBuilder2);
        }
        sourceBuilder.query(boolQueryBuilder);

二:es分词查询:

es分词查询使用BoolQueryBuilder

SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
if (!StringUtils.isEmpty(param.getAppId())) {
    boolQueryBuilder.filter(QueryBuilders.termQuery("app_id", param.getAppId()));
}
if (!StringUtils.isEmpty(param.getOperationType())) {
    boolQueryBuilder.filter(QueryBuilders.termQuery("opt_type", param.getOperationType().getValue()));
}
sourceBuilder.query(boolQueryBuilder);

遇到的坑:wildcardQuery的模糊查询,在es中属性类型type=text时仍然是分词的形式查询,只有在type=keyword时,wildcardQuery实现类似于mysql中like模糊查询的方法才会生效。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值