咱们若是发出一个搜索请求的话,会拿到一堆搜索结果网站
GET /test/_search { "took" : 1, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 2, "relation" : "eq" }, "max_score" : 1.0, "hits" : [ { "_index" : "test", "_type" : "_doc", "_id" : "1", "_score" : 1.0, "_source" : { "field1" : "value1", "field2" : "value2" } }, { "_index" : "test", "_type" : "_doc", "_id" : "3", "_score" : 1.0, "_source" : { "field1" : "value3" } } ] } }
下面主要分析一下返回结果的各类数据的含义和timeout机制spa
took: 整个搜索请求花费了多少毫秒
timed_out:表示请求是否超时
hits.total: value表示返回结果的总数,relation表示关系 例如通常是eq表示相等
hits.max_score: 表示本次搜索的全部结果中,最大的相关度分数是多少,每一条document对于search的相关度,越相关,_score分数就越大,排位就越靠前
hits.hits: 表示查询出来document的结果集合
shards: total表示打到的全部分片,successful表示打到的分片中查询成功的分片,skipped表示打到的分片中跳过的分片,failed表示打到的分片中查询失败的分片code
由于ES默认是没有timeout的,因此先描述一下场景假设咱们有些搜索应用,对时间是很敏感的,好比电商网站,你不能让用户等个10分钟,若是那样的话,人家早就走了,不来买东西了。blog
因而咱们就须要有timeout机制,指定每一个shard,就只能在timeout时间范围内,将搜索到的部分数据(也可能全都搜索到了),直接返回给客户端,而不是等到全部数据全都搜索出来之后在返回。图片
这样就能够确保说,一次搜索请求能够在用户指定的timeout时长内完成,为一些时间敏感的搜索应用提供良好的支持。ip
注意:ES在默认状况下是没有所谓的timeout的,好比说若是你的搜索特别慢,每一个shard都要花好几分钟才能查询出来全部的数据,那么你的搜索请求也会等待好几分钟以后才会返回。
下面画图简单描述一下timeout机制it