27.初识搜索引擎_search结果深入解析(search timeout机制揭秘)

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

 

GET /_search
----------------------------------结果----------------------------------
{
  "took": 6,
  "timed_out": false,
  "_shards": {
    "total": 6,
    "successful": 6,
    "failed": 0
  },
  "hits": {
    "total": 10,
    "max_score": 1,
    "hits": [
      {
        "_index": ".kibana",
        "_type": "config",
        "_id": "5.2.0",
        "_score": 1,
        "_source": {
          "buildNum": 14695
        }
      }
    ]
  }
}

took:整个搜索请求花费了多少毫秒
hits.total:本次搜索,返回了几条结果
hits.max_score:本次搜索的所有结果中,最大的相关度分数是多少,每一条document对于search的相关度,越相关,_score分数越大,排位越靠前。
hits.hits:默认查询前10条数据,完整数据,_score降序排序
shards:shards fail的条件(primary和replica全部挂掉),不影响其他shard。默认情况下来说,一个搜索请求,会打到一个index的所有primary shard上去,当然了,每个primary shard都可能会有一个或多个replic shard,所以请求也可以到primary shard的其中一个replica shard上去。

2、搜索的timeout机制,底层的原理

timeout:默认无timeout,latency平衡completeness,手动指定timeout,timeout查询执行机制。
在查询时,可以手动加上timeout,如:GET /_search?timeout=10ms,timeout=10ms(毫秒),timeout=1s(秒),timeout=1m(分)。
为什么设置timeout?
(1)如果不设置timeout,我们在查询数据时,加入要查询的数据很多,花费时间很长,甚至几分钟,我们就要等待几分钟之后才能收到返回的结果,对于一些响应速度很敏感的应用,比如电商网站,如果让客户等待这么长时间,那么客户可能就走了,用户体验不好。
(2)timeout机制可以指定每个shard只能在timeout指定的时间范围内,将搜索到的部分数据(也可能全部搜索到了),直接返回给客户端程序,而不是等待数据全部查询出来之后再返回给客户端。
(3)确切的说一次搜索请求可以在用户指定的timeout时长内完成,为一些时间敏感的搜索应用提供良好的支持。
举例:
假设一个es集群内有2个shard,每个shard搜索出来1000条数据需要耗时一分钟,当客户端发送搜索请求并指定timeout为10ms时,假如每个shard在10ms内可以搜索到10条数据,那么当timeout请求时间到达10ms是,这个es集群会返回10*2=20条数据给客户端。

timeout机制图解



 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值