//跨索引查询
SearchRequest request = new SearchRequest(index1,index2);
在es中想实现类似于下面的查询,废话不多说,es的should查询代替的是or,但是必须搭配must来使用
select * from table where (a != 1 and b != 1) or (startTime> “2022-05-20” and (a == 1 or b == 1))
直接上代码
1 @Autowired 2 private RestHighLevelClient client; 3 public List<Map<String,Object>> searchList(String index1,String index2,Map<String,Object> paramMap 4 ,String time,int page,int size) { 5 List<Map<String,Object>> hitList = new ArrayList(); 6 try { 7 //搜索请求 8 SearchRequest request = new SearchRequest(index1,index2); 9 //请求条件构建器,这里和mybatis中的自定义查询有点类型 10 SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); 11 BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery(); 12 13 //等于条件(其他的一些条件) 14 if (paramMap != null && !paramMap.isEmpty()) { 15 paramMap.forEach((k, v) -> { 16 boolQueryBuilder.must(QueryBuilders.termsQuery(k + KEYWORD, v)); 17 }); 18 } 19 20 21 BoolQueryBuilder query1 = QueryBuilders.boolQuery(); 22 query1.mustNot(QueryBuilders.termsQuery("a" + ".keyword", "1")); 23 query1.mustNot(QueryBuilders.termsQuery("b" + ".keyword", "1")); 24 25 BoolQueryBuilder query2 = QueryBuilders.boolQuery(); 26 //时间范围查询 27 if (StringUtils.isNotBlank(time)) { 28 query2.must(QueryBuilders.rangeQuery("startTime"+KEYWORD).from(time)); 29 } 30 31 BoolQueryBuilder shouldQuery = QueryBuilders.boolQuery(); 32 shouldQuery.should(QueryBuilders.wildcardQuery("a" , "1")); 33 shouldQuery.should(QueryBuilders.wildcardQuery("b" , "1")); 34 query2.must(shouldQuery); 35 36 BoolQueryBuilder query3 = QueryBuilders.boolQuery(); 37 query3.should(query1); 38 query3.should(query2); 39 boolQueryBuilder.must(query3); 40 41 42 //把查询添加放入请求中 43 sourceBuilder.query(boolQueryBuilder); 44 request.source(sourceBuilder); 45 //起始位置 46 sourceBuilder.from((page - 1) * size); 47 //查询数量 48 sourceBuilder.size(size); 49 sourceBuilder.trackTotalHits(true); 50 //建立SearchResponse 51 SearchResponse response; 52 53 response = client.search(request, RequestOptions.DEFAULT); 54 //封装查询的信息 55 for (SearchHit hit : response.getHits().getHits()) { 56 hitList.add(hit.getSourceAsMap()); 57 log.debug("查询结果:{}", hit.getSourceAsString()); 58 } 59 } catch (IOException e) { 60 e.printStackTrace(); 61 } 62 return hitList; 63 }
将每一块拆成一个BoolQueryBuilder ,最后or用should()拼接起来
原文地址:http://www.cnblogs.com/zhaosq/p/16869578.html
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,请务用于商业用途!
3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员!
8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载
声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性