当前位置:   article > 正文

【微服务】第29节: ElasticSearch的 RestClient查询&数据耦合_elasticsearchclient查询

elasticsearchclient查询

目录

1.RestClient查询

1.1.快速入门

1.1.1.发送请求

1.1.2.解析响应结果

1.1.3.总结

1.2.叶子查询

1.3.复合查询

1.4.排序和分页

1.5.高亮

2.数据聚合

2.1.DSL实现聚合

2.1.1.Bucket聚合

2.1.2.带条件聚合

2.1.3.Metric聚合

2.1.4.总结

2.2.RestClient实现聚合


1.RestClient查询

文档的查询依然使用学习的 RestHighLevelClient对象,查询的基本步骤如下⁉️ :

  • 1)创建request对象,这次是搜索,所以是SearchRequest

  • 2)准备请求参数,也就是查询DSL对应的JSON参数

  • 3)发起请求

  • 4)解析响应,响应结果相对复杂,需要逐层解析

1.1.快速入门

之前说过,由于Elasticsearch对外暴露的接口都是Restful风格的接口,因此JavaAPI调用就是在发送Http请求。而我们核心要做的就是利用利用Java代码组织请求参数解析响应结果

这个参数的格式完全参考DSL查询语句的JSON结构,因此我们在学习的过程中,会不断的把JavaAPI与DSL语句对比。大家在学习记忆的过程中,也应该这样对比学习。

1.1.1.发送请求

首先以match_all查询为例,其DSL和JavaAPI的对比如图:

代码解读:

  • ☑️第一步,创建SearchRequest对象,指定索引库名

  • ☑️第二步,利用request.source()构建DSL,DSL中可以包含查询、分页、排序、高亮等

    • query():代表查询条件,利用QueryBuilders.matchAllQuery()构建一个match_all查询的DSL

  • ☑️第三步,利用client.search()发送请求,得到响应

这里关键的API有两个,一个是request.source(),它构建的就是DSL中的完整JSON参数。其中包含了querysortfromsizehighlight等所有功能:

另一个是QueryBuilders,其中包含了我们学习过的各种叶子查询复合查询等:

1.1.2.解析响应结果

在发送请求以后,得到了响应结果SearchResponse,这个类的结构与我们在kibana中看到的响应结果JSON结构完全一致:

  1. {
  2. "took" : 0,
  3. "timed_out" : false,
  4. "hits" : {
  5. "total" : {
  6. "value" : 2,
  7. "relation" : "eq"
  8. },
  9. "max_score" : 1.0,
  10. "hits" : [
  11. {
  12. "_index" : "heima",
  13. "_type" : "_doc",
  14. "_id" : "1",
  15. "_score" : 1.0,
  16. "_source" : {
  17. "info" : "Java讲师",
  18. "name" : "赵云"
  19. }
  20. }
  21. ]
  22. }
  23. }

因此,我们解析SearchResponse的代码就是在解析这个JSON结果,对比如下:

代码解读

elasticsearch返回的结果是一个JSON字符串,结构包含:

  • hits:命中的结果

    • total:总条数,其中的value是具体的总条数值

    • max_score:所有结果中得分最高的文档的相关性算分

    • hits:搜索结果的文档数组,其中的每个文档都是一个json对象

      • _source:文档中的原始数据,也是json对象

因此,我们解析响应结果,就是逐层解析JSON字符串,流程如下:

  • SearchHits:通过response.getHits()获取,就是JSON中的最外层的hits,代表命中的结果

    • SearchHits#getTotalHits().value:获取总条数信息

    • SearchHits#getHits():获取SearchHit数组,也就是文档数组

      • SearchHit#getSourceAsString():获取文档结果中的_source,也就是原始的json文档数据

1.1.3.总结

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/寸_铁/article/detail/836549
推荐阅读
相关标签