一,三种属于一个层级,一般must filter放在一个boolQuery中,should放在另外一个新的boolQuery中,然后把should boolQuery作为前一个boolQuery条件。且关注一下filter用法,这个可以用于多参数查询,类似in,即参数是一个集合。

二,其实filter should也可以放在同级,如图2

如下图一:

BoolQueryBuilder multiFiledQuery = QueryBuilders.boolQuery();multiFiledQuery.should(QueryBuilders.termsQuery(convertToUnderScore(ResPurchaseWideInfo::getProductCode), req.getSearchKey()));multiFiledQuery.should(new WildcardQueryBuilder(convertToUnderScore(ResPurchaseWideInfo::getProductCode), "*".concat(req.getSearchKey()).concat("*")));multiFiledQuery.should(new WildcardQueryBuilder(convertToUnderScore(ResPurchaseWideInfo::getProductName).concat(".keyword"), "*".concat(req.getSearchKey().concat("*"))));multiFiledQuery.should(QueryBuilders.termsQuery(convertToUnderScore(ResPurchaseWideInfo::getProductName).concat(".keyword"), req.getSearchKey()));multiFiledQuery.should(QueryBuilders.termsQuery(convertToUnderScore(ResPurchaseWideInfo::getBarCode), req.getSearchKey()));multiFiledQuery.minimumShouldMatch(1);boolQuery.must(multiFiledQuery);
 @Override@SneakyThrowspublic List<ResProductInfoVOPage> getDetailInfoByGroupAndBigMidCategoryCode(ReqProductInfoVO req) {SearchRequest searchRequest = new SearchRequest(EsConfigEnum.PURCHASE_WIDE_INFO_INDEX.getAlias());SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();BoolQueryBuilder boolQuery = QueryBuilders.boolQuery();sourceBuilder.query(boolQuery);sourceBuilder.fetchSource(RES_FUZZY_PRODUCT_INFO_VO_FIELDS, null);// 分页sourceBuilder.from(req.getPage() * req.getSize() - req.getSize());sourceBuilder.size(req.getSize());if (Objects.nonNull(req.getIsSortByProductCode()) && req.getIsSortByProductCode()) {sourceBuilder.sort(convertToUnderScore(ResPurchaseWideInfo::getProductCode));}searchRequest.source(sourceBuilder);// 条码精确查询,名称,编码模糊查询*x*;且名称查询必须加.keyword,否则查询不到数据if (org.apache.commons.lang3.StringUtils.isNotBlank(req.getSearchKey())) {BoolQueryBuilder multiFiledQuery = QueryBuilders.boolQuery();multiFiledQuery.should(QueryBuilders.termsQuery(convertToUnderScore(ResPurchaseWideInfo::getProductCode), req.getSearchKey()));multiFiledQuery.should(new WildcardQueryBuilder(convertToUnderScore(ResPurchaseWideInfo::getProductCode), "*".concat(req.getSearchKey()).concat("*")));multiFiledQuery.should(new WildcardQueryBuilder(convertToUnderScore(ResPurchaseWideInfo::getProductName).concat(".keyword"), "*".concat(req.getSearchKey().concat("*"))));multiFiledQuery.should(QueryBuilders.termsQuery(convertToUnderScore(ResPurchaseWideInfo::getProductName).concat(".keyword"), req.getSearchKey()));multiFiledQuery.should(QueryBuilders.termsQuery(convertToUnderScore(ResPurchaseWideInfo::getBarCode), req.getSearchKey()));multiFiledQuery.minimumShouldMatch(1);boolQuery.must(multiFiledQuery);}//采购组if (CollectionUtils.isNotEmpty(req.getPurchaseGroupCodes())) {List<String> purchaseGroups = req.getPurchaseGroupCodes().stream().map(org.apache.commons.lang3.StringUtils::lowerCase).distinct().collect(Collectors.toList());purchaseGroups.addAll(req.getPurchaseGroupCodes());purchaseGroups = purchaseGroups.stream().distinct().collect(Collectors.toList());boolQuery.filter(QueryBuilders.termsQuery(convertToUnderScore(ResPurchaseWideInfo::getPurchaseGroupCode), purchaseGroups));}// 大类编码(精确)if (StringUtils.isNotBlank(req.getBigCategoryCode())) {boolQuery.filter(QueryBuilders.termQuery(convertToUnderScore(ResPurchaseWideInfo::getBigCategoryCode), req.getBigCategoryCode()));}// 中类编码(精确)if (StringUtils.isNotBlank(req.getMidCategoryCode())) {boolQuery.must(QueryBuilders.termQuery(convertToUnderScore(ResPurchaseWideInfo::getMidCategoryCode), req.getMidCategoryCode()));}SearchResponse response = null;response = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);if (Objects.isNull(response)) {return Collections.emptyList();}List<Map<String, Object>> list = toRes(response.getHits().getHits());return JSON.parseArray(JSON.toJSONString(list), ResProductInfoVOPage.class);}

图二

  SearchRequest searchRequest = new SearchRequest(EsConfigEnum.PURCHASE_WIDE_INFO_INDEX.getAlias());SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();sourceBuilder.fetchSource(SHOP_PRODUCT_PURCHASE_FIELDS, null);BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();boolQueryBuilder.filter(QueryBuilders.termQuery(convertToUnderScore(ResPurchaseWideInfo::getShopCode), reqVO.getShopCode())).should(QueryBuilders.termQuery(convertToUnderScore(ResPurchaseWideInfo::getProductCode), reqVO.getProductCode())).should(new WildcardQueryBuilder(convertToUnderScore(ResPurchaseWideInfo::getProductCode), "*".concat(reqVO.getProductCode()).concat("*"))).should(QueryBuilders.termQuery(convertToUnderScore(ResPurchaseWideInfo::getBarCode), reqVO.getProductCode())).should(new WildcardQueryBuilder(convertToUnderScore(ResPurchaseWideInfo::getBarCode), "*".concat(reqVO.getProductCode()).concat("*"))).minimumShouldMatch(1);if (CollectionUtils.isNotEmpty(reqVO.getPurchaseGroupCodes())) {boolQueryBuilder.filter(QueryBuilders.termsQuery(convertToUnderScore(ResPurchaseWideInfo::getPurchaseGroupCode), reqVO.getPurchaseGroupCodes()));}

es java 实现should must filter组合查询相关推荐

  1. es java match_java操作elasticsearch实现条件查询(match、multiMatch、term、terms、reange)...

    1.条件match query查询 //条件查询match query @Testpublic void test10() throwsUnknownHostException {//1.指定es集群 ...

  2. es java api 进行聚合+桶聚合查询

    假设1个member有多个参加的meeting(会议),每个meeting可多次参加,每次参加对应一条参加时间和备注记录 需求: 获取某个member的所有meeting的最新一条记录 查询语句 {& ...

  3. es中must和should的组合查询

    使用must和should混用的时候,should不生效? 列如,需要同时满足productRecomentd和location,shold中满足一个条件就返回,经过多次测试,发现should不起效果 ...

  4. Elastic Search 中bool组合查询

    Bool组合概念 逻辑判断是否 Bool组合语法 must:必须符合,包含 should:满足任一条件 filter:必须符合,是否命中,不计算分值,等同must must_not:必须不符合,不包含 ...

  5. ES基本查询,filter 查询,组合查询

    Elasticsearch 是功能强大的全文搜索引擎,用它的目的就是为了能快速的查询你想好要的数据 基本查询:利用Elasticsearch内置查询条件进行查询 组合查询:把多个基本查询组合在一起的复 ...

  6. java多条件组合查询6_elasticsearch组合多条件查询实现restful api以及java代码实现

    elasticsearch组合多条件查询实现restful api以及java代码实现 实际开发中,基本都是组合多条件查询. elasticsearch提供bool来实现这种需求: 主要参数: mus ...

  7. ElasticSearch 组合查询(must not_must should filter)

    ElasticSearch 组合查询(must not_must should filter) ElasticSearch Demo: package org.ssgroup;import java. ...

  8. ElasticSearch实现高亮、范围查询和多条件组合查询(java和kibana)

    ElasticSearch客户端配置参考之前的博客 1.高亮 高亮的本质其实是将搜索结果中需要高亮的字段进行替换 public List<Map<String,Object>> ...

  9. elk组合查询 es组合查询

    笔记参考: https://note.youdao.com/ynoteshare/index.html?id=dc7be4dfa0d34d984223d4b87139b9c2&type=not ...

  10. 【ES笔记02】ElasticSearch数据库之查询操作(match、must、must_not、should、_source、filter、range、exists、ids、term、terms)

    这篇文章,主要介绍ElasticSearch数据库之查询操作(match.must.must_not.should._source.filter.range.exists.ids.term.terms ...

最新文章

  1. tomcat修改进程名称
  2. Android开发指南(42) —— Adding Custom Suggestions
  3. 苹果手机还原网络设置会怎样_装维技巧|手机能连wifi但网不通?
  4. virtualbox中安装ubuntu
  5. Table.Rows.Remove(dr)和Table.Delete()的区别
  6. 子网规划与组网实验_交换机四种组网方式,你都清楚吗
  7. PaddleClas模型训练/评估:数据准备
  8. oracle数据库给用户解锁和修改密码和提升权限的命令
  9. Struts2——一个用来开发 MVC 应用程序的框架
  10. Ribbon 均衡策略 与 脱离 Eureka 使用、LoadBalancerClient
  11. 非科班研究生转码-零基础学java笔记总结复习(1)
  12. 汽车电子行业常见缩略词(前视摄像头相关)
  13. 何凯明最新一作:Masked Autoencoders Are Scalable Vision Learners
  14. “5G+”发展论坛暨“金帽子”年度盛典圆满结束,共同探讨5G背景下网安技术发展和前沿趋势
  15. mysql统计类似SQL语句查询次数
  16. TIM定时器_CNT_ARR_PSC_CRR
  17. parker派克柱塞泵PV046R1K1T1NUDM
  18. 黑群晖安装ZEROTIER ONE实现内网穿透
  19. eclipse team没有选项_eclipse的TEAM没有选项
  20. 可编程渲染管线4 聚光灯阴影

热门文章

  1. 使用sever2008做DHCP中继代理
  2. 光伏行业缘何抢屋顶?
  3. 如何开发Linux内核?
  4. 不×××,用google!!
  5. 【转】Nginx双机热备高可用解决方案【二】
  6. 开发基于CXF的 RESTful WebService web 项目 webservice发布
  7. 城域容灾体系的突破性进展
  8. FRR BGP协议分析11 -- ZEBRA初始化
  9. zebra代码简单分析 --- 001
  10. Linux 如何限制用户的磁盘使用量 -- quota