Elasticsearch Java REST高级客户端SearchApi

矫情吗;* 2021-11-29 16:10 392阅读 0赞

Elasticsearch Java REST高级客户端SearchApi

版本:Elasticsearch 7.2.0

本节讲述一下Elasticsearch的条件搜索、排序、分组和聚合,以几个例子简单实现以下操作

1.matchAllQuery查询

2.matchQuery查询

3.termQuery查询

4.聚合操作aggregation

5.创建和关闭客户端

6.maven

对人工智能感兴趣的同学,可以点击以下链接:

现在人工智能非常火爆,很多朋友都想学,但是一般的教程都是为博硕生准备的,太难看懂了。最近发现了一个非常适合小白入门的教程,不仅通俗易懂而且还很风趣幽默。所以忍不住分享一下给大家。点这里可以跳转到教程。

https://www.cbedai.net/u014646662

1.matchAllQuery查询

  1. /**
  2. * matchAll查询
  3. */
  4. public static void matchAllQuery() {
  5. RestHighLevelClient client = getClient();
  6. // 这里可以不指定索引,也可以指定多个
  7. SearchRequest searchRequest = new SearchRequest("movies");
  8. SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
  9. searchRequest.source(searchSourceBuilder);
  10. searchSourceBuilder.query(QueryBuilders.matchAllQuery());
  11. // 从第一条开始,包括第一条
  12. searchSourceBuilder.from(0);
  13. // 查询30条
  14. searchSourceBuilder.size(3);
  15. // 先按year倒排
  16. searchSourceBuilder.sort(SortBuilders.fieldSort("year").order(SortOrder.DESC));
  17. // 再按id正排
  18. searchSourceBuilder.sort("id");
  19. SearchResponse search = null;
  20. try {
  21. search = client.search(searchRequest, RequestOptions.DEFAULT);
  22. } catch (IOException e) {
  23. e.printStackTrace();
  24. }
  25. search.getHits().forEach(System.out::println);
  26. close(client);
  27. }

2.matchQuery查询

  1. /**
  2. * match查询
  3. */
  4. public static void matchQuery() {
  5. RestHighLevelClient client = getClient();
  6. // 这里可以不指定索引,也可以指定多个
  7. SearchRequest searchRequest = new SearchRequest("movies");
  8. SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
  9. searchRequest.source(searchSourceBuilder);
  10. MatchQueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("title", "you life");
  11. searchSourceBuilder.query(matchQueryBuilder);
  12. // // 模糊查询
  13. // matchQueryBuilder.fuzziness(Fuzziness.AUTO);
  14. // // 前缀查询的长度
  15. // matchQueryBuilder.prefixLength(3);
  16. // // max expansion 选项,用来控制模糊查询
  17. // matchQueryBuilder.maxExpansions(10);
  18. searchSourceBuilder.from(0);
  19. searchSourceBuilder.size(32);
  20. // 按评分排序
  21. searchSourceBuilder.sort("_score");
  22. SearchResponse search = null;
  23. try {
  24. search = client.search(searchRequest, RequestOptions.DEFAULT);
  25. search.getHits().forEach(System.out::println);
  26. } catch (IOException e) {
  27. e.printStackTrace();
  28. } finally {
  29. close(client);
  30. }
  31. }

3.termQuery查询

  1. public static void termQuery() {
  2. RestHighLevelClient client = getClient();
  3. SearchRequest request = new SearchRequest("movies");
  4. SearchSourceBuilder builder = new SearchSourceBuilder();
  5. request.source(builder);
  6. builder.from(0);
  7. builder.size(5);
  8. builder.query(QueryBuilders.termQuery("title", "you"));
  9. SearchResponse search = null;
  10. try {
  11. search = client.search(request, RequestOptions.DEFAULT);
  12. } catch (IOException e) {
  13. e.printStackTrace();
  14. }
  15. search.getHits().forEach(System.out::println);
  16. close(client);
  17. }

4.聚合操作aggregation

  1. public static void aggregation() {
  2. RestHighLevelClient client = getClient();
  3. SearchRequest request = new SearchRequest("movies");
  4. SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
  5. AvgAggregationBuilder avg = AggregationBuilders.avg("id_avg").field("id");
  6. MaxAggregationBuilder max = AggregationBuilders.max("id_max").field("id");
  7. MinAggregationBuilder min = AggregationBuilders.min("id_min").field("id");
  8. TermsAggregationBuilder group = AggregationBuilders.terms("year_group").field("year");
  9. group.subAggregation(avg).subAggregation(max).subAggregation(min);
  10. searchSourceBuilder.profile(true);
  11. searchSourceBuilder.aggregation(group);
  12. request.source(searchSourceBuilder);
  13. SearchResponse search = null;
  14. try {
  15. search = client.search(request, RequestOptions.DEFAULT);
  16. Aggregations aggregations = search.getAggregations();
  17. Terms terms = aggregations.get("year_group");
  18. //打印全部分组
  19. terms.getBuckets().forEach( bucket ->
  20. bucket.getAggregations().asMap().forEach((k,v) ->
  21. System.out.println(bucket.getKeyAsString()+"---" +k + "->" + ((SingleValue)v).value()))
  22. );
  23. //只打印2000年的内容
  24. String year = "2000";
  25. Bucket bucket = terms.getBucketByKey(year);
  26. SingleValue maxAgg = bucket.getAggregations().get("id_max");
  27. SingleValue avgAgg = bucket.getAggregations().get("id_avg");
  28. SingleValue minAgg = bucket.getAggregations().get("id_min");
  29. System.out.println(year+"年最大id:"+maxAgg.value());
  30. System.out.println(year+"年平均id:"+avgAgg.value());
  31. System.out.println(year+"年最小id:"+minAgg.value());
  32. } catch (IOException e) {
  33. e.printStackTrace();
  34. }finally {
  35. close(client);
  36. }
  37. }

5.创建和关闭客户端

  1. /**
  2. * 关闭客户端
  3. *
  4. * @param client
  5. */
  6. private static void close(RestHighLevelClient client) {
  7. try {
  8. client.close();
  9. } catch (IOException e) {
  10. e.printStackTrace();
  11. }
  12. }
  13. /**
  14. * 获取客户端
  15. *
  16. * @return
  17. */
  18. private static RestHighLevelClient getClient() {
  19. RestHighLevelClient client = new RestHighLevelClient(
  20. RestClient.builder(new HttpHost("elk-node01", 9200, "http"), new HttpHost("elk-node02", 9200, "http"),
  21. new HttpHost("elk-node03", 9200, "http")));
  22. return client;
  23. }

6.maven

  1. <dependency>
  2. <groupId>org.elasticsearch.plugin</groupId>
  3. <artifactId>x-pack-sql-jdbc</artifactId>
  4. <version>7.2.0</version>
  5. <!-- <version>6.7.1</version> -->
  6. </dependency>
  7. <dependency>
  8. <groupId>org.elasticsearch.client</groupId>
  9. <artifactId>elasticsearch-rest-high-level-client</artifactId>
  10. <version>7.2.0</version>
  11. <!-- <version>6.7.1</version> -->
  12. </dependency>

发表评论

表情:
评论列表 (有 0 条评论,392人围观)

还没有评论,来说两句吧...

相关阅读