elasticsearch6.6版本 es填坑之路 解决:QueryBuilder同时使用should must时,会影响should的筛选结果!

如题,我们经常会使用es的组合查询时,用到must和should 分别对应sql语句里面的 and  和 or;

今天开发的时候,should单独使用的结果没问题,加上must发现should不起作用了。

先上错误的写法:

QueryBuilder termQueryBuilder = QueryBuilders.matchPhraseQuery("tablenamecn","*"+keyWords1 +"*"); //中文 包含的搜索,类似于sql中的 like "%keyword%" ,不分词的前提
QueryBuilder termQueryBuilder2 = QueryBuilders.wildcardQuery("tablename","*"+keyWords1 +"*"); //英文包含的搜素, 类似like 也不分词

上面2条 为 or的关系,满足其一即可;

下面的为must条件

BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
   boolQueryBuilder.must(QueryBuilders.matchQuery("disabled", 0))
                  .must(QueryBuilders.matchQuery("tablestatus", 0))
                  .must(QueryBuilders.matchQuery("type", TABLE_TYPE));

然后我想当然的在下面加上了:

boolQueryBuilder.should(termQueryBuilder);
boolQueryBuilder.should(termQueryBuilder2);

结果should筛选压根不起作用了,全是must的结果。。。现修复如下:  

QueryBuilder query = QueryBuilders.boolQuery()
        .should(QueryBuilders.boolQuery()
                .filter(QueryBuilders.matchPhraseQuery("tablenamecn","*"+keyWords1 +"*")))
        .should(QueryBuilders.boolQuery()
                .filter(QueryBuilders.wildcardQuery("tablename","*"+keyWords1 +"*")));

BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
boolQueryBuilder.must(QueryBuilders.matchQuery("disabled", 0))
                .must(QueryBuilders.matchQuery("tablestatus", 0))
                .must(QueryBuilders.matchQuery("type", TABLE_TYPE))
                .must(query);

结果正常!亲测可用

有问题下方评论,觉得好可以点赞!谢谢~~~

 

 

评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值