Java操作Elasticsearch6实现单个字段多值匹配

引言

单个字段多值匹配的意思类似mysql中某个字段的in查询,最近需求变更,需要在elasticsearch中实现多值匹配,下面总结一下几种实现的方法。

基础代码

下面是指定查询索引名称和索引类型基础代码:
SearchRequest searchRequest = new SearchRequest();
searchRequest.indices(indexName);
searchRequest.types(indexType);
SearchSourceBuilder builder = new SearchSourceBuilder();
BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
builder.query(boolQueryBuilder);
searchRequest.source(builder);
SearchResponse response = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
//查询结果
SearchHits searchHits = response.getHits();
//查询结果条数
long total = searchHits.getTotalHits();
如果对上面的代码不太熟悉,可先参考之前的博客Java操作Elasticsearch6实现基本查询

构造条件

下面以查询type字段为例,有0,1,2三种值,es中字段类型为long
方法一:QueryBuilders.termsQuery
//构造数组,初始化需要匹配的值
long[] typeArray = new long[]{0, 1};
boolQueryBuilder.filter(QueryBuilders.termsQuery("type", typeArray));
对应的sql语句为:
select * from table_name where type in (0,1);
需要注意的是这里使用的是termsQuery,而不是termQuery,使用termQuery查询会报错的。
方法二:must条件拼接,should查询多值
//构造类型查询条件
BoolQueryBuilder typeQueryBuilder = new BoolQueryBuilder();
//must连接其他条件,相当于and;should相当于or
boolQueryBuilder.must(typeQueryBuilder.should(QueryBuilders.termQuery("type", 0))
        .should(QueryBuilders.termQuery("type", 1)));
对应的sql语句为:
select * from table_name where type=1 or type =2;
方法三:mustNot反向匹配
boolQueryBuilder.mustNot(QueryBuilders.termQuery("type", 2))
要查询0和1的,只需要把2的过滤即可,可直接使用mustNot查询。
对应的sql语句为:
select * from table_name where type!=2;
而如果要查询等于2的,也可以采用多个不等条件,使用should连接
BoolQueryBuilder typeQueryBuilder = new BoolQueryBuilder();     boolQueryBuilder.mustNot(typeQueryBuilder.should(QueryBuilders.termQuery("type", 0)).should(QueryBuilders.termQuery("type", 1)));     
对应的sql语句为:
select * from table_name where type!=0 and type!=1;

总结

本篇博客主要介绍了terms多值搜索,相当于mysql中的in语句。实际应用过程,就是对elasticsearch查询语法慢慢熟悉的最好的方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值