Java ES 多条件过滤查询条件

本文探讨了在Elasticsearch中如何处理复杂且可能冲突的查询条件,特别是在过滤空值、空字符串和数值0的情况。通过使用Java编程语言,介绍了如何利用should和mustNot组合实现灵活的条件筛选,确保查询的准确性和效率。

以下是通过Java程序对 ES 进行多条件的过滤查询条件,有时候查询的条件是互相冲突,比如一个需要过滤field的值有以下三种情况:

1.Null

2.空字符串(“”)

3.0

但是我们在满足了Null的情况下无法再继续满足后面2个条件,因为判断一个Field是否为空,我们经常使用

QueryBuilders.boolQuery().mustNot(QueryBuilders.existsQuery("remarks"));

但是用了mustNot之后就无法过滤其他条件了,所以我们可以通过 should(QueryBuilders.boolQuery() 这样的聚合查询方式来封装上面的方法,如下:

BoolQueryBuilder queryTotal = QueryBuilders.boolQuery();
if(StringUtils.isNotBlank(params.getRemarkFlag())){
                if("1".equals(params.getRemarkFlag())){
                    queryTotal.filter(QueryBuilders.existsQuery("remarks"));
                    queryTotal.mustNot(QueryBuilders.termQuery("remarks",""));
                    queryTotal.mustNot(QueryBuilders.termQuery("remarks",0));
                }else if("2".equals(params.getRemarkFlag())){
                    queryTotal.must(QueryBuilders.boolQuery()
                            .should(QueryBuilders.termQuery("remarks",0))
                            .should(QueryBuilders.termQuery("remarks",""))
                            .should(QueryBuilders.boolQuery()
                                    .mustNot(QueryBuilders.existsQuery("remarks"))));
                }
            }

上面的代码中当RemarkFlag等于2时,其中就用了should(QueryBuilders.boolQuery()来封装mustNot(QueryBuilders.existsQuery("remarks"))这个方法,这样查询条件相当于

" remarks == 0 || remarks == "" || remarks == Null "

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值