您当前的位置: 首页 >  ar

Dongguo丶

暂无认证

  • 2浏览

    0关注

    472博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

26search结果深入解析(search timeout机制)

Dongguo丶 发布时间:2021-11-07 00:16:13 ,浏览量:2

1、我们如果发出一个搜索请求的话,会拿到一堆搜索结果,本节课,我们来讲解一下,这个搜索结果里的各种数据,都代表了什么含义

查询所有

GET /_search

响应结果

{
  "took": 8,
  "timed_out": false,
  "_shards": {
    "total": 11,
    "successful": 11,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": 14,
    "max_score": 1,
    "hits": [
      {
        "_index": ".kibana",
        "_type": "config",
        "_id": "5.6.0",
        "_score": 1,
        "_source": {
          "buildNum": 15523
        }
      },
      {
        "_index": "test_index",
        "_type": "test_type",
        "_id": "8",
        "_score": 1,
        "_source": {
          "test_field": "test client 2"
        }
      },
      {
        "_index": "test_index",
        "_type": "test_type",
        "_id": "10",
        "_score": 1,
        "_source": {
          "test_field1": "test1",
          "test_field2": "updated test2"
        }
      },
      {
        "_index": "test_index",
        "_type": "test_type",
        "_id": "12",
        "_score": 1,
        "_source": {
          "test_field": "test12"
        }
      },
      {
        "_index": "ecommerce",
        "_type": "product",
        "_id": "2",
        "_score": 1,
        "_source": {
          "name": "jiajieshi yagao",
          "desc": "youxiao fangzhu",
          "price": 25,
          "producer": "jiajieshi producer",
          "tags": [
            "fangzhu"
          ]
        }
      },
      {
        "_index": "ecommerce",
        "_type": "product",
        "_id": "4",
        "_score": 1,
        "_source": {
          "name": "special yagao",
          "desc": "special meibai",
          "price": 50,
          "producer": "special yagao  producer",
          "tags": [
            "meibai"
          ]
        }
      },
      {
        "_index": "test_index",
        "_type": "test_type",
        "_id": "4",
        "_score": 1,
        "_source": {
          "test_field1": "test field111111"
        }
      },
      {
        "_index": "test_index",
        "_type": "test_type",
        "_id": "6",
        "_score": 1,
        "_source": {
          "test_field": "test test"
        }
      },
      {
        "_index": "test_index",
        "_type": "test_type",
        "_id": "2",
        "_score": 1,
        "_source": {
          "test_field": "replaced test2"
        }
      },
      {
        "_index": "ecommerce",
        "_type": "product",
        "_id": "1",
        "_score": 1,
        "_source": {
          "name": "gaolujie yagao",
          "desc": "gaoxiao meibai",
          "price": 30,
          "producer": "gaolujie producer",
          "tags": [
            "meibai",
            "fangzhu"
          ]
        }
      }
    ]
  }
}

总共有系统自带的.kabana、实战练习中创建的test_index和ecommerce,共3个索引

由于数据过多,只看一部分结果

 {
     "took": 8,
     "timed_out": false,
     "_shards":
     {
         "total": 11,
         "successful": 11,
         "skipped": 0,
         "failed": 0
     },
     "hits":
     {
         "total": 14,
         "max_score": 1,
         "hits": [
         {
             "_index": ".kibana",
             "_type": "config",
             "_id": "5.6.0",
             "_score": 1,
             "_source":
             {
                 "buildNum": 15523
             }
         }]
     }
 }

took:整个搜索请求花费了多少毫秒

hits.total:本次搜索,返回了几条结果 hits.max_score:本次搜索的所有结果中,最大的相关度分数是多少,每一条document对于search的相关度,越相关,_ score分数越大,排位越靠前 hits.hits:默认查询前10条数据,每一个document的完整数据,按照_ score降序排序

shards:shards fail的条件(primary和replica全部挂掉),不影响其他shard。默认情况下来说,一个搜索请求,会打到一个index的所有primary shard上去,当然了,每个primary shard都可能会有一个或多个replic shard,所以请求也可以到primary shard对应的其中一个replica shard上去。

timeout:默认无timeout,latency平衡completeness,手动指定timeout,timeout查询执行机制

2、我们来讲解一下,搜索的timeout机制,底层的原理,画图讲解

默认情况下,在你没有设置所谓的timeout时,是没有超时限制的,比如说你的搜索特别慢,每个shard需要花费很长时间才能查询出来请求的数据,那么你的搜索请求会一直等到查询出来才会返回。

一般业务上的搜索请求,是对时间很敏感的,要考虑到用户的体验度,不可能让用户等待几分钟,甚至十几分钟才能等到搜索请求的结果。

timeout机制:指定每个shard,在timeout时间范围内,将搜索的部分数据(也可能已经全部搜索到了),直接返回给应用程序,不用长时间的查询,等到全部数据搜索出来再返回。

就是说,一次搜索请求可以在指定的timeout时间完成,为一些对时间敏感的业务搜索提供更好的支持。

指定timeout

timeout=10ms,timeout=1s,timeout=1m

GET /_search?timeout=10s

内,将搜索的部分数据(也可能已经全部搜索到了),直接返回给应用程序,不用长时间的查询,等到全部数据搜索出来再返回。

就是说,一次搜索请求可以在指定的timeout时间完成,为一些对时间敏感的业务搜索提供更好的支持。

指定timeout

timeout=10ms,timeout=1s,timeout=1m

GET /_search?timeout=10s

image-20211106204506013

关注
打赏
1638062488
查看更多评论
立即登录/注册

微信扫码登录

0.0392s