一、基本概念
RestHighLevelClient 是es的原生高客户端,ElasticsearchRestTemplate 是es基于Spring集成 用法和JPA类似,如果是有用Spring或者SpringBoot推荐还是ElasticsearchRestTemplate
二、HighLevelRESTClient的使用
1、判断索引是否存在
GetIndexRequest request = new GetIndexRequest(indexName); boolean exists = restHighLevelClient.indices().exists(request, RequestOptions.DEFAULT); restHighLevelClient.close();
2、MultiSearch批量查询
public static void multiSearch() { var client = getClient(); MultiSearchRequest msRequest = new MultiSearchRequest(); SearchRequest request1 = new SearchRequest("movies"); SearchSourceBuilder builder1 = new SearchSourceBuilder(); builder1.query(QueryBuilders.matchQuery("title", "you")); request1.source(builder1); msRequest.add(request1); SearchRequest request2 = new SearchRequest("movies"); SearchSourceBuilder builder2 = new SearchSourceBuilder(); builder2.query(QueryBuilders.matchQuery("title", "life")); request2.source(builder2); msRequest.add(request2); try { MultiSearchResponse responses = client.msearch(msRequest, RequestOptions.DEFAULT); Arrays.asList(responses.getResponses()).stream() .map(item -> item.getResponse()) .map(response -> response.getHits()) .filter(hit -> hit != null) .forEach(hit -> hit.forEach(System.out::println)); } catch (IOException e) { e.printStackTrace(); }finally { close(client); } } /** * 关闭客户端 * * @param client */ private static void close(RestHighLevelClient client) { try { client.close(); } catch (IOException e) { e.printStackTrace(); } } /** * 获取客户端 * * @return */ private static RestHighLevelClient getClient() { RestHighLevelClient client = new RestHighLevelClient( RestClient.builder(new HttpHost("elk-node01", 9200, "http"), new HttpHost("elk-node02", 9200, "http"), new HttpHost("elk-node03", 9200, "http"))); return client; }