1. //使用 MultiSearch Api 在一个http请求中并行执行多个Search请求。
    2. public static void multiSearch() {
    3. var client = getClient();
    4. MultiSearchRequest msRequest = new MultiSearchRequest();
    5. SearchRequest request1 = new SearchRequest("movies");
    6. SearchSourceBuilder builder1 = new SearchSourceBuilder();
    7. builder1.query(QueryBuilders.matchQuery("title", "you"));
    8. request1.source(builder1);
    9. msRequest.add(request1);
    10. SearchRequest request2 = new SearchRequest("movies");
    11. SearchSourceBuilder builder2 = new SearchSourceBuilder();
    12. builder2.query(QueryBuilders.matchQuery("title", "life"));
    13. request2.source(builder2);
    14. msRequest.add(request2);
    15. try {
    16. MultiSearchResponse responses = client.msearch(msRequest, RequestOptions.DEFAULT);
    17. Arrays.asList(responses.getResponses()).stream()
    18. .map(item -> item.getResponse())
    19. .map(response -> response.getHits())
    20. .filter(hit -> hit != null)
    21. .forEach(hit -> hit.forEach(System.out::println));
    22. } catch (IOException e) {
    23. e.printStackTrace();
    24. }finally {
    25. close(client);
    26. }
    27. }
    28. /**
    29. * 关闭客户端
    30. *
    31. * @param client
    32. */
    33. private static void close(RestHighLevelClient client) {
    34. try {
    35. client.close();
    36. } catch (IOException e) {
    37. e.printStackTrace();
    38. }
    39. }
    40. /**
    41. * 获取客户端
    42. *
    43. * @return
    44. */
    45. private static RestHighLevelClient getClient() {
    46. RestHighLevelClient client = new RestHighLevelClient(
    47. RestClient.builder(new HttpHost("elk-node01", 9200, "http"), new HttpHost("elk-node02", 9200, "http"),
    48. new HttpHost("elk-node03", 9200, "http")));
    49. return client;
    50. }
    51. -----------------------------------------------------------------------------------
    52. //多条件,组合时间范围查询
    53. // 创建es客户端
    54. RestHighLevelClient esClient = new RestHighLevelClient(RestClient.builder(new HttpHost(esip, 9200)));
    55. BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
    56. BoolQueryBuilder boolBuilder = QueryBuilders.boolQuery();
    57. TermQueryBuilder termQueryBuilder=QueryBuilders.termQuery("L7_PROTO_NAME", L7ProtoName);
    58. boolBuilder.must(termQueryBuilder);
    59. TermQueryBuilder termQueryBuilder=QueryBuilders.termQuery("IPV4_SRC_ADDR", Ipv4SrcAddr);
    60. boolBuilder.must(termQueryBuilder);
    61. RangeQueryBuilder rangeQueryBuilder=QueryBuilders.rangeQuery(eventtype).gte(gte).lte(lte).format("yyyy-MM-dd'T'HH:mm:ss+0800");
    62. boolBuilder.must(rangeQueryBuilder);
    63. SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
    64. MultiSearchRequest request = new MultiSearchRequest();
    65. SearchRequest firstSearchRequest = new SearchRequest();
    66. searchSourceBuilder.from(pagebegin);
    67. searchSourceBuilder.size(num);
    68. searchSourceBuilder.sort(eventtype,SortOrder.DESC);
    69. searchSourceBuilder.query(boolBuilder);
    70. firstSearchRequest.source(searchSourceBuilder);
    71. firstSearchRequest.indices(indices);
    72. request.add(firstSearchRequest);
    73. List<Object> datalist = new LinkedList<Object>();
    74. try {
    75. MultiSearchResponse response = esClient.msearch(request, RequestOptions.DEFAULT);
    76. response.forEach(t->{
    77. SearchResponse resps = t.getResponse();
    78. SearchHits hits = resps.getHits();
    79. resp.put("time", resps.getTook().getStringRep());
    80. resp.put("total", hits.getTotalHits().value);
    81. Arrays.stream(resps.getHits().getHits())
    82. .forEach(i -> {
    83. String socketString = i.getSourceAsString();;
    84. JSONObject a = JSONObject.parseObject(socketString);
    85. datalist.add(a);
    86. });
    87. });
    88. esClient.close();
    89. } catch (Exception e) {
    90. e.printStackTrace();
    91. }finally {
    92. if (esClient!=null) {
    93. try {
    94. esClient.close();
    95. } catch (Exception e2) {
    96. }
    97. }
    98. }
    99. ---------------------------------------------------
    100. //多条件查询
    101. // 创建es客户端
    102. RestHighLevelClient esClient = new RestHighLevelClient(RestClient.builder(new HttpHost(esip, 9200)));
    103. //查询条件
    104. MultiSearchRequest request = new MultiSearchRequest();
    105. SearchRequest firstSearchRequest = new SearchRequest();
    106. SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
    107. if (dstip.length()!=0) {
    108. searchSourceBuilder.query(QueryBuilders.termQuery("dstip", dstip));
    109. }
    110. if (srcip.length()!=0) {
    111. searchSourceBuilder.query(QueryBuilders.termQuery("srcip", srcip));;
    112. }
    113. searchSourceBuilder.from(pagebegin);
    114. searchSourceBuilder.size(num);
    115. firstSearchRequest.source(searchSourceBuilder);
    116. firstSearchRequest.indices(indices);
    117. request.add(firstSearchRequest);
    118. List<Map<Object, Object>> dataList = new ArrayList<Map<Object, Object>>();
    119. try {
    120. MultiSearchResponse response = esClient.msearch(request, RequestOptions.DEFAULT);
    121. response.forEach(t->{
    122. SearchResponse resps = t.getResponse();
    123. SearchHits hits = resps.getHits();
    124. resp.put("time", resps.getTook().getStringRep());
    125. resp.put("total", hits.getTotalHits().value);
    126. Arrays.stream(resps.getHits().getHits())
    127. .forEach(i -> {
    128. String socketString = i.getSourceAsString();;
    129. JSONObject a = JSONObject.parseObject(socketString);
    130. datalist.add(a);
    131. });
    132. });
    133. esClient.close();
    134. } catch (Exception e) {
    135. //e.printStackTrace();
    136. }finally {
    137. if (esClient!=null) {
    138. try {
    139. esClient.close();
    140. } catch (Exception e2) {
    141. }
    142. }
    143. }

    [

    ](https://blog.csdn.net/u014646662/article/details/97000258)