Elasticsearch软件是由Java语言开发的,所以也可以通过Java API的方式对Elasticsearch服务进行访问

1、创建 Maven 项目

在 IDEA 开发工具中创建 Maven 项目(模块也可)ES

四、Java API操作 - 图1

  • 修改 pom 文件,增加 Maven 依赖关系
  1. <dependencies>
  2. <dependency>
  3. <groupId>org.elasticsearch</groupId>
  4. <artifactId>elasticsearch</artifactId>
  5. <version>7.8.0</version>
  6. </dependency>
  7. <!-- elasticsearch 的客户端 -->
  8. <dependency>
  9. <groupId>org.elasticsearch.client</groupId>
  10. <artifactId>elasticsearch-rest-high-level-client</artifactId>
  11. <version>7.8.0</version>
  12. </dependency>
  13. <!-- elasticsearch 依赖 2.x 的 log4j -->
  14. <dependency>
  15. <groupId>org.apache.logging.log4j</groupId>
  16. <artifactId>log4j-api</artifactId>
  17. <version>2.8.2</version>
  18. </dependency>
  19. <dependency>
  20. <groupId>org.apache.logging.log4j</groupId>
  21. <artifactId>log4j-core</artifactId>
  22. <version>2.8.2</version>
  23. </dependency>
  24. <dependency>
  25. <groupId>com.fasterxml.jackson.core</groupId>
  26. <artifactId>jackson-databind</artifactId>
  27. <version>2.9.9</version>
  28. </dependency>
  29. <!-- junit 单元测试 -->
  30. <dependency>
  31. <groupId>junit</groupId>
  32. <artifactId>junit</artifactId>
  33. <version>4.12</version>
  34. </dependency>
  35. </dependencies>

2、客户端对象

四、Java API操作 - 图2

因为早期版本的客户端对象已经不再推荐使用,且在未来版本中会被删除,所以这里我们采用高级 REST 客户端对象

  1. public static void main(String[] args) throws IOException {
  2. //创建ES客户端
  3. RestHighLevelClient esClient = new RestHighLevelClient(
  4. RestClient.builder(new HttpHost("localhost", 9200, "http"))
  5. );
  6. //关闭ES客户端
  7. esClient.close();
  8. }

注意:9200 端口为 Elasticsearch 的 Web 通信端口 ,localhost 为启动 ES 服务的主机名

执行代码,查看控制台信息:

四、Java API操作 - 图3

3、索引操作

ES 服务器正常启动后,可以通过 Java API 客户端对象对 ES 索引进行操作

3.1、创建索引

  1. public static void main(String[] args) throws IOException {
  2. RestHighLevelClient esClient = new RestHighLevelClient(
  3. RestClient.builder(new HttpHost("localhost", 9200, "http"))
  4. );
  5. //创建索引 - 请求对象
  6. CreateIndexRequest request = new CreateIndexRequest("user");
  7. //发送请求,获取响应
  8. CreateIndexResponse response = esClient.indices().create(request, RequestOptions.DEFAULT);
  9. //响应状态
  10. boolean acknowledged = response.isAcknowledged();
  11. System.out.println("索引操作:" + acknowledged);
  12. esClient.close();
  13. }

四、Java API操作 - 图4

3.2、查看索引

  1. public static void main(String[] args) throws IOException {
  2. RestHighLevelClient esClient = new RestHighLevelClient(
  3. RestClient.builder(new HttpHost("localhost", 9200, "http"))
  4. );
  5. //查询索引 - 请求对象
  6. GetIndexRequest request = new GetIndexRequest("user");
  7. //发送请求,获取响应
  8. GetIndexResponse response = esClient.indices().get(request, RequestOptions.DEFAULT);
  9. System.out.println("aliases:" + response.getAliases());
  10. System.out.println("mappings:" + response.getMappings());
  11. System.out.println("settings:" + response.getSettings());
  12. esClient.close();
  13. }

四、Java API操作 - 图5

3.3、删除索引

  1. public static void main(String[] args) throws IOException {
  2. RestHighLevelClient esClient = new RestHighLevelClient(
  3. RestClient.builder(new HttpHost("localhost", 9200, "http"))
  4. );
  5. //删除索引 - 请求对象
  6. DeleteIndexRequest request = new DeleteIndexRequest("user");
  7. //发送请求,获取响应
  8. AcknowledgedResponse response = esClient.indices().delete(request, RequestOptions.DEFAULT);
  9. //响应状态
  10. System.out.println("操作结果:" + response.isAcknowledged());
  11. esClient.close();
  12. }

四、Java API操作 - 图6

4、文档操作

4.1、新增文档

创建数据模型

  1. public class User {
  2. private String name;
  3. private Integer age;
  4. private String sex;
  5. public String getName() {
  6. return name;
  7. }
  8. public void setName(String name) {
  9. this.name = name;
  10. }
  11. public Integer getAge() {
  12. return age;
  13. }
  14. public void setAge(Integer age) {
  15. this.age = age;
  16. }
  17. public String getSex() {
  18. return sex;
  19. }
  20. public void setSex(String sex) {
  21. this.sex = sex;
  22. }
  23. }

创建数据,添加到文档中

  1. public static void main(String[] args) throws IOException {
  2. RestHighLevelClient esClient = new RestHighLevelClient(
  3. RestClient.builder(new HttpHost("localhost", 9200, "http"))
  4. );
  5. //新增文档 - 请求对象
  6. IndexRequest request = new IndexRequest();
  7. //设置索引及唯一性标识
  8. request.index("user").id("1001");
  9. //创建数据对象
  10. User user = new User();
  11. user.setName("zhangsan");
  12. user.setAge(30);
  13. user.setSex("男");
  14. //向ES插入数据,必须将数据转换为JSON格式
  15. ObjectMapper mapper = new ObjectMapper();
  16. String userJson = mapper.writeValueAsString(user);
  17. request.source(userJson, XContentType.JSON);
  18. //客户端发送请求,获取响应对象
  19. IndexResponse response = esClient.index(request, RequestOptions.DEFAULT);
  20. System.out.println("_index:" + response.getIndex());
  21. System.out.println("_id:" + response.getId());
  22. System.out.println("_result:" + response.getResult());
  23. esClient.close();
  24. }

四、Java API操作 - 图7

4.2、修改文档

  1. public static void main(String[] args) throws IOException {
  2. RestHighLevelClient esClient = new RestHighLevelClient(
  3. RestClient.builder(new HttpHost("localhost", 9200, "http"))
  4. );
  5. //修改文档 - 请求对象
  6. UpdateRequest request = new UpdateRequest();
  7. //设置索引及唯一性标识
  8. request.index("user").id("1001");
  9. //设置请求体,对数据进行修改
  10. request.doc(XContentType.JSON, "sex", "女");
  11. //客户端发送请求,获取响应对象
  12. UpdateResponse response = esClient.update(request, RequestOptions.DEFAULT);
  13. System.out.println("_index:" + response.getIndex());
  14. System.out.println("_id:" + response.getId());
  15. System.out.println("_result:" + response.getResult());
  16. esClient.close();
  17. }

四、Java API操作 - 图8

4.3、查询文档

  1. public static void main(String[] args) throws IOException {
  2. RestHighLevelClient esClient = new RestHighLevelClient(
  3. RestClient.builder(new HttpHost("localhost", 9200, "http"))
  4. );
  5. //查询文档 - 请求对象
  6. GetRequest request = new GetRequest();
  7. //设置索引及唯一性标识
  8. request.index("user").id("1001");
  9. //客户端发送请求,获取响应对象
  10. GetResponse response = esClient.get(request, RequestOptions.DEFAULT);
  11. System.out.println("_index:" + response.getIndex());
  12. System.out.println("_type:" + response.getType());
  13. System.out.println("_id:" + response.getId());
  14. System.out.println("resource:" + response.getSourceAsString());
  15. esClient.close();
  16. }

四、Java API操作 - 图9

4.4、删除文档

  1. public static void main(String[] args) throws IOException {
  2. RestHighLevelClient esClient = new RestHighLevelClient(
  3. RestClient.builder(new HttpHost("localhost", 9200, "http"))
  4. );
  5. //查询文档 - 请求对象
  6. DeleteRequest request = new DeleteRequest();
  7. //设置索引及唯一性标识
  8. request.index("user").id("1001");
  9. //客户端发送请求,获取响应对象
  10. DeleteResponse response = esClient.delete(request, RequestOptions.DEFAULT);
  11. System.out.println(response.toString());
  12. esClient.close();
  13. }

四、Java API操作 - 图10

4.5、批量新增

  1. public static void main(String[] args) throws IOException {
  2. RestHighLevelClient esClient = new RestHighLevelClient(
  3. RestClient.builder(new HttpHost("localhost", 9200, "http"))
  4. );
  5. //创建批量新增请求对象
  6. BulkRequest request = new BulkRequest();
  7. request.add(new IndexRequest().index("user").id("1001").source(XContentType.JSON, "name", "zhangsan"));
  8. request.add(new IndexRequest().index("user").id("1002").source(XContentType.JSON, "name", "lisi"));
  9. request.add(new IndexRequest().index("user").id("1003").source(XContentType.JSON, "name", "wangwu"));
  10. //客户端发送请求,获取响应对象
  11. BulkResponse responses = esClient.bulk(request, RequestOptions.DEFAULT);
  12. //打印结果信息
  13. System.out.println("took:" + responses.getTook());
  14. System.out.println("items:" + responses.getItems());
  15. esClient.close();
  16. }

四、Java API操作 - 图11

4.6、批量删除

  1. public static void main(String[] args) throws IOException {
  2. RestHighLevelClient esClient = new RestHighLevelClient(
  3. RestClient.builder(new HttpHost("localhost", 9200, "http"))
  4. );
  5. //创建批量删除请求对象
  6. BulkRequest request = new BulkRequest();
  7. request.add(new DeleteRequest().index("user").id("1001"));
  8. request.add(new DeleteRequest().index("user").id("1002"));
  9. request.add(new DeleteRequest().index("user").id("1003"));
  10. //客户端发送请求,获取响应对象
  11. BulkResponse responses = esClient.bulk(request, RequestOptions.DEFAULT);
  12. //打印结果信息
  13. System.out.println("took:" + responses.getTook());
  14. System.out.println("items:" + responses.getItems());
  15. esClient.close();
  16. }

四、Java API操作 - 图12

5、高级查询

5.1、请求体查询

查询所有索引数据

  1. public static void main(String[] args) throws IOException {
  2. RestHighLevelClient esClient = new RestHighLevelClient(
  3. RestClient.builder(new HttpHost("localhost", 9200, "http"))
  4. );
  5. // 创建搜索请求对象
  6. SearchRequest request = new SearchRequest();
  7. request.indices("user");
  8. // 构建查询的请求体
  9. SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
  10. // 查询所有数据
  11. searchSourceBuilder.query(QueryBuilders.matchAllQuery());
  12. request.source(searchSourceBuilder);
  13. //客户端发送请求,获取响应对象
  14. SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
  15. // 查询匹配
  16. System.out.println("took:" + response.getTook());
  17. System.out.println("timeout:" + response.isTimedOut());
  18. SearchHits hits = response.getHits();
  19. System.out.println("total:" + hits.getTotalHits());
  20. System.out.println("MaxScore:" + hits.getMaxScore());
  21. for (SearchHit hit : hits) {
  22. //输出每条查询的结果信息
  23. System.out.println(hit.getSourceAsString());
  24. }
  25. esClient.close();
  26. }

四、Java API操作 - 图13

term查询,查询条件为关键字

  1. public static void main(String[] args) throws IOException {
  2. RestHighLevelClient esClient = new RestHighLevelClient(
  3. RestClient.builder(new HttpHost("localhost", 9200, "http"))
  4. );
  5. // 创建搜索请求对象
  6. SearchRequest request = new SearchRequest();
  7. request.indices("user");
  8. // 构建查询的请求体
  9. SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
  10. // 条件查询 termQuery
  11. searchSourceBuilder.query(QueryBuilders.termQuery("age",30));
  12. request.source(searchSourceBuilder);
  13. //客户端发送请求,获取响应对象
  14. SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
  15. // 查询匹配
  16. System.out.println("took:" + response.getTook());
  17. System.out.println("timeout:" + response.isTimedOut());
  18. SearchHits hits = response.getHits();
  19. System.out.println("total:" + hits.getTotalHits());
  20. System.out.println("MaxScore:" + hits.getMaxScore());
  21. for (SearchHit hit : hits) {
  22. //输出每条查询的结果信息
  23. System.out.println(hit.getSourceAsString());
  24. }
  25. esClient.close();
  26. }

四、Java API操作 - 图14

分页查询

  1. public static void main(String[] args) throws IOException {
  2. RestHighLevelClient esClient = new RestHighLevelClient(
  3. RestClient.builder(new HttpHost("localhost", 9200, "http"))
  4. );
  5. // 创建搜索请求对象
  6. SearchRequest request = new SearchRequest();
  7. request.indices("user");
  8. // 构建查询的请求体
  9. SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
  10. // 分页查询
  11. searchSourceBuilder.query(QueryBuilders.matchAllQuery());
  12. // (当前页码-1)*每页显示数据条数
  13. searchSourceBuilder.from(4);//第三页
  14. searchSourceBuilder.size(2);
  15. request.source(searchSourceBuilder);
  16. //客户端发送请求,获取响应对象
  17. SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
  18. // 查询匹配
  19. System.out.println("took:" + response.getTook());
  20. System.out.println("timeout:" + response.isTimedOut());
  21. SearchHits hits = response.getHits();
  22. System.out.println("total:" + hits.getTotalHits());
  23. System.out.println("MaxScore:" + hits.getMaxScore());
  24. for (SearchHit hit : hits) {
  25. //输出每条查询的结果信息
  26. System.out.println(hit.getSourceAsString());
  27. }
  28. esClient.close();
  29. }

四、Java API操作 - 图15

数据排序

  1. public static void main(String[] args) throws IOException {
  2. RestHighLevelClient esClient = new RestHighLevelClient(
  3. RestClient.builder(new HttpHost("localhost", 9200, "http"))
  4. );
  5. // 创建搜索请求对象
  6. SearchRequest request = new SearchRequest();
  7. request.indices("user");
  8. // 构建查询的请求体
  9. SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
  10. searchSourceBuilder.query(QueryBuilders.matchAllQuery());
  11. // 排序
  12. searchSourceBuilder.sort("age", SortOrder.DESC);
  13. request.source(searchSourceBuilder);
  14. //客户端发送请求,获取响应对象
  15. SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
  16. // 查询匹配
  17. System.out.println("took:" + response.getTook());
  18. System.out.println("timeout:" + response.isTimedOut());
  19. SearchHits hits = response.getHits();
  20. System.out.println("total:" + hits.getTotalHits());
  21. System.out.println("MaxScore:" + hits.getMaxScore());
  22. for (SearchHit hit : hits) {
  23. //输出每条查询的结果信息
  24. System.out.println(hit.getSourceAsString());
  25. }
  26. esClient.close();
  27. }

四、Java API操作 - 图16

过滤字段

  1. public static void main(String[] args) throws IOException {
  2. RestHighLevelClient esClient = new RestHighLevelClient(
  3. RestClient.builder(new HttpHost("localhost", 9200, "http"))
  4. );
  5. // 创建搜索请求对象
  6. SearchRequest request = new SearchRequest();
  7. request.indices("user");
  8. // 构建查询的请求体
  9. SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
  10. searchSourceBuilder.query(QueryBuilders.matchAllQuery());
  11. // 查询字段过滤
  12. String excludes[] = {};
  13. String includes[] = {"name"};
  14. searchSourceBuilder.fetchSource(includes, excludes);
  15. request.source(searchSourceBuilder);
  16. //客户端发送请求,获取响应对象
  17. SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
  18. // 查询匹配
  19. System.out.println("took:" + response.getTook());
  20. System.out.println("timeout:" + response.isTimedOut());
  21. SearchHits hits = response.getHits();
  22. System.out.println("total:" + hits.getTotalHits());
  23. System.out.println("MaxScore:" + hits.getMaxScore());
  24. for (SearchHit hit : hits) {
  25. //输出每条查询的结果信息
  26. System.out.println(hit.getSourceAsString());
  27. }
  28. esClient.close();
  29. }

四、Java API操作 - 图17

Bool查询

  1. public static void main(String[] args) throws IOException {
  2. RestHighLevelClient esClient = new RestHighLevelClient(
  3. RestClient.builder(new HttpHost("localhost", 9200, "http"))
  4. );
  5. // 创建搜索请求对象
  6. SearchRequest request = new SearchRequest();
  7. request.indices("user");
  8. // 构建查询的请求体
  9. SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
  10. BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
  11. // 必须包含
  12. boolQueryBuilder.must(QueryBuilders.matchQuery("age", "30"));
  13. // 一定不含
  14. boolQueryBuilder.mustNot(QueryBuilders.matchQuery("name", "zhangsan"));
  15. // 可能包含
  16. boolQueryBuilder.should(QueryBuilders.matchQuery("sex", "男"));
  17. searchSourceBuilder.query(boolQueryBuilder);
  18. request.source(searchSourceBuilder);
  19. //客户端发送请求,获取响应对象
  20. SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
  21. // 查询匹配
  22. System.out.println("took:" + response.getTook());
  23. System.out.println("timeout:" + response.isTimedOut());
  24. SearchHits hits = response.getHits();
  25. System.out.println("total:" + hits.getTotalHits());
  26. System.out.println("MaxScore:" + hits.getMaxScore());
  27. for (SearchHit hit : hits) {
  28. //输出每条查询的结果信息
  29. System.out.println(hit.getSourceAsString());
  30. }
  31. esClient.close();
  32. }

四、Java API操作 - 图18

范围查询

  1. public static void main(String[] args) throws IOException {
  2. RestHighLevelClient esClient = new RestHighLevelClient(
  3. RestClient.builder(new HttpHost("localhost", 9200, "http"))
  4. );
  5. // 创建搜索请求对象
  6. SearchRequest request = new SearchRequest();
  7. request.indices("user");
  8. // 构建查询的请求体
  9. SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
  10. RangeQueryBuilder rangeQuery = QueryBuilders.rangeQuery("age");
  11. // 大于等于
  12. rangeQuery.gte("30");
  13. // 小于等于
  14. rangeQuery.lte("40");
  15. searchSourceBuilder.query(rangeQuery);
  16. request.source(searchSourceBuilder);
  17. //客户端发送请求,获取响应对象
  18. SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
  19. // 查询匹配
  20. System.out.println("took:" + response.getTook());
  21. System.out.println("timeout:" + response.isTimedOut());
  22. SearchHits hits = response.getHits();
  23. System.out.println("total:" + hits.getTotalHits());
  24. System.out.println("MaxScore:" + hits.getMaxScore());
  25. for (SearchHit hit : hits) {
  26. //输出每条查询的结果信息
  27. System.out.println(hit.getSourceAsString());
  28. }
  29. esClient.close();
  30. }

四、Java API操作 - 图19

模糊查询

  1. public static void main(String[] args) throws IOException {
  2. RestHighLevelClient esClient = new RestHighLevelClient(
  3. RestClient.builder(new HttpHost("localhost", 9200, "http"))
  4. );
  5. // 创建搜索请求对象
  6. SearchRequest request = new SearchRequest();
  7. request.indices("user");
  8. // 构建查询的请求体
  9. SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
  10. FuzzyQueryBuilder fuzziness = QueryBuilders.fuzzyQuery("name", "wangwu").fuzziness(Fuzziness.ONE);
  11. searchSourceBuilder.query(fuzziness);
  12. request.source(searchSourceBuilder);
  13. //客户端发送请求,获取响应对象
  14. SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
  15. // 查询匹配
  16. System.out.println("took:" + response.getTook());
  17. System.out.println("timeout:" + response.isTimedOut());
  18. SearchHits hits = response.getHits();
  19. System.out.println("total:" + hits.getTotalHits());
  20. System.out.println("MaxScore:" + hits.getMaxScore());
  21. for (SearchHit hit : hits) {
  22. //输出每条查询的结果信息
  23. System.out.println(hit.getSourceAsString());
  24. }
  25. esClient.close();
  26. }

四、Java API操作 - 图20

5.2、高亮查询

  1. public static void main(String[] args) throws IOException {
  2. RestHighLevelClient esClient = new RestHighLevelClient(
  3. RestClient.builder(new HttpHost("localhost", 9200, "http"))
  4. );
  5. // 创建搜索请求对象
  6. SearchRequest request = new SearchRequest();
  7. request.indices("user");
  8. // 构建查询的请求体
  9. SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
  10. //构建查询方式:高亮查询
  11. TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name", "zhangsan");
  12. //设置查询方式
  13. searchSourceBuilder.query(termQueryBuilder);
  14. //构建高亮字段
  15. HighlightBuilder highlightBuilder = new HighlightBuilder();
  16. highlightBuilder.preTags("<font color='red'>");
  17. highlightBuilder.postTags("</font>");
  18. highlightBuilder.field("name");
  19. //设置高亮对象
  20. searchSourceBuilder.highlighter(highlightBuilder);
  21. //设置请求体
  22. request.source(searchSourceBuilder);
  23. //客户端发送请求,获取响应对象
  24. SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
  25. // 查询匹配
  26. System.out.println("took:" + response.getTook());
  27. System.out.println("timeout:" + response.isTimedOut());
  28. SearchHits hits = response.getHits();
  29. System.out.println("total:" + hits.getTotalHits());
  30. System.out.println("MaxScore:" + hits.getMaxScore());
  31. for (SearchHit hit : hits) {
  32. //输出每条查询的结果信息
  33. System.out.println(hit.getSourceAsString());
  34. //打印高亮结果
  35. Map<String, HighlightField> highlightFields = hit.getHighlightFields();
  36. System.out.println(highlightFields);
  37. }
  38. esClient.close();
  39. }

四、Java API操作 - 图21

5.3、聚合查询

最大

  1. public static void main(String[] args) throws IOException {
  2. RestHighLevelClient esClient = new RestHighLevelClient(
  3. RestClient.builder(new HttpHost("localhost", 9200, "http"))
  4. );
  5. // 创建搜索请求对象
  6. SearchRequest request = new SearchRequest();
  7. request.indices("user");
  8. // 构建查询的请求体
  9. SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
  10. //设置查询方式
  11. AggregationBuilder aggregationBuilder =AggregationBuilders.max("maxAge").field("age");
  12. searchSourceBuilder.aggregation(aggregationBuilder);
  13. //设置请求体
  14. request.source(searchSourceBuilder);
  15. //客户端发送请求,获取响应对象
  16. SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
  17. // 查询匹配
  18. ObjectMapper mapper = new ObjectMapper();
  19. Aggregations aggregations = response.getAggregations();
  20. System.out.println(mapper.writeValueAsString(aggregations));
  21. Aggregation maxAge = aggregations.getAsMap().get("maxAge");
  22. System.out.println(mapper.writeValueAsString(maxAge));
  23. String valueAsString = ((Max) maxAge).getValueAsString();
  24. System.out.println(valueAsString);
  25. esClient.close();
  26. }

四、Java API操作 - 图22

分组统计

  1. public static void main(String[] args) throws IOException {
  2. RestHighLevelClient esClient = new RestHighLevelClient(
  3. RestClient.builder(new HttpHost("localhost", 9200, "http"))
  4. );
  5. // 创建搜索请求对象
  6. SearchRequest request = new SearchRequest();
  7. request.indices("user");
  8. // 构建查询的请求体
  9. SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
  10. //设置查询方式
  11. AggregationBuilder aggregationBuilder =AggregationBuilders.terms("ageGroup").field("age");
  12. searchSourceBuilder.aggregation(aggregationBuilder);
  13. //设置请求体
  14. request.source(searchSourceBuilder);
  15. //客户端发送请求,获取响应对象
  16. SearchResponse response = esClient.search(request, RequestOptions.DEFAULT);
  17. // 查询匹配
  18. ObjectMapper mapper = new ObjectMapper();
  19. Aggregations aggregations = response.getAggregations();
  20. System.out.println(mapper.writeValueAsString(aggregations));
  21. Aggregation ageGroup = aggregations.getAsMap().get("ageGroup");
  22. System.out.println(mapper.writeValueAsString(ageGroup));
  23. List<? extends Terms.Bucket> buckets = ((Terms) ageGroup).getBuckets();
  24. for (Terms.Bucket bucket : buckets) {
  25. //分组的key
  26. String key = bucket.getKeyAsString();
  27. //分组的值
  28. long docCount = bucket.getDocCount();
  29. System.out.println(key+"------"+docCount);
  30. }
  31. esClient.close();
  32. }

四、Java API操作 - 图23