• Elasticsearch系列(六)ES数据搜索之基本流程


    本文转载于:ES搜索

    一、搜索过程

    文档能够从主分片或任意一个复制分片被检索。
    在这里插入图片描述
    下面我们罗列在主分片或复制分片上检索一个文档必要的顺序步骤:
    (1) 客户端给Node 1发送get请求。
    (2) 节点使用文档的_id确定文档属于分片0。分片0对应的复制分片在三个节点上都有。此时,它转发请求到Node 2。
    (3) Node 2返回文档(document)给Node 1然后返回给客户端。
    对于读请求,为了平衡负载,请求节点会为每个请求选择不同的分片——它会循环所有分片副本。

    思考:使用Spring-Data-ES操作ES的时候,是如何做到负载均衡?


    二、搜索结果字段说明

    最基本的搜索API表单是空搜索(empty search),它没有指定任何的查询条件,只返回集群索引中的所有文档:

    GET /_search
    
    • 1

    响应内容(为了编辑简洁)类似于这样:

    {
       "hits" : {
          "total" :       14,
          "hits" : [
            {
              "_index":   "us",
              "_type":    "tweet",
              "_id":      "7",
              "_score":   1,
              "_source": {
                 "date":    "2014-09-17",
                 "name":    "John Smith",
                 "tweet":   "The Query DSL is really powerful and flexible",
                 "user_id": 2
              }
           },
            ... 9 RESULTS REMOVED ...
          ],
          "max_score" :   1
       },
       "took" :           4,
       "_shards" : {
          "failed" :      0,
          "successful" :  10,
          "total" :       10
       },
       "timed_out" :      false
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    1、字段解释
    (1) hits

    响应中最重要的部分是hits,它包含了total字段来表示匹配到的文档总数,hits数组还包含了匹配到的前10条数据。

    hits数组中的每个结果都包含_index、_type和文档的_id字段,被加入到_source字段中这意味着在搜索结果中我们将可以直接使用全部文档。这不像其他搜索引擎只返回文档ID,需要你单独去获取文档。

    每个节点都有一个_score字段,这是相关性得分(relevance score),它衡量了文档与查询的匹配程度。默认的,返回的结果中关联性最大的文档排在首位;这意味着,它是按照_score降序排列的。这种情况下,我们没有指定任何查询,所以所有文档的相关性是一样的,因此所有结果的_score都是取得一个中间值1

    max_score指的是所有文档匹配查询中_score的最大值。

    (2) took

    took告诉我们整个搜索请求花费的毫秒数。

    (3) shards

    _shards节点告诉我们参与查询的分片数(total字段),有多少是成功的(successful字段),有多少的是失败的(failed字段)。通常我们不希望分片失败,不过这个有可能发生。如果我们遭受一些重大的故障导致主分片和复制分片都故障,那这个分片的数据将无法响应给搜索请求。这种情况下,Elasticsearch将报告分片failed,但仍将继续返回剩余分片上的结果。

    (4) timeout

    time_out值告诉我们查询超时与否。一般的,搜索请求不会超时。如果响应速度比完整的结果更重要,你可以定义timeout参数为10或者10ms(10毫秒),或者1s(1秒)

    GET /_search?timeout=10ms
    
    • 1

    Elasticsearch将返回在请求超时前收集到的结果。
    超时不是一个断路器(circuit breaker)。

    需要注意的是timeout不会停止执行查询,它仅仅告诉你目前顺利返回结果的节点然后关闭连接。在后台,其他分片可能依旧执行查询,尽管结果已经被发送。

    使用超时是因为对于你的业务需求来说非常重要,而不是因为你想中断执行长时间运行的查询。

    本文转载于:ES搜索

  • 相关阅读:
    uniapp h5网页打开白屏
    总结Linux 的常用命令(Linux入门)
    在学校拿奖学金,找工作无人问津?跟着学校学编程,面试难过得靠拼
    生成网络论文阅读styleGAN1(一):论文速览
    Windows11 wsl2编译Android14 使用ASfP Debug windows上启动的模拟器
    mybatis写sql
    Python每日一练(牛客新题库)——第26天:面向对象
    Solidity中的calldata,storage,memory
    APS高级排产在休闲食品行业的应用
    力扣每日一题-第44天-290. 单词规律
  • 原文地址:https://blog.csdn.net/m0_67402013/article/details/126362643