主要知识点
1、对搜索执行结果的说明
2、timeout机制讲解
一、对执行 GET /_search 的结果的说明
执行结果如下(只保留部分)
{
"took": 29,
"timed_out": false,
"_shards": {
"total": 16,
"successful": 16,
"failed": 0
},
"hits": {
"total": 25,
"max_score": 1,
"hits": [
{
"_index": ".kibana",
"_type": "config",
"_id": "5.1.1",
"_score": 1,
"_source": {
"buildNum": 14566
}
},
以下说明各个字段的含义:
1、took:整个搜索请求花费了多少毫秒
2、hits.total:本次搜索,返回了多少条结果
3、hits.max_score:本次搜索的所有结果中,最大的相关度分数是多少,每一条document对于search的相关度,越相关,_score分数越大,排位越靠前
4、hits.hits:默认查询前10条数据,完整数据,_score降序排序
5、shards:表示本次搜索过程中的shards信息。total 表示本次搜索请求一共路由到多少个shards中,"successful": 表示这些路由到的shards中有多少个是成功了的,"failed":表示这些路由到的shards中有多少个是失败了的。
shards fail的条件(primary和replica全部挂掉),不影响其他shard。默认情况下来说,一个搜索请求,会路由到一个index的所有primary shard上去,每个primary shard都可能会有一个或多个replic shard,所以请求也可以到primary shard的其中一个replica shard上去。
6、"hits" 一个数据,此次搜索返回的数据,默认返回10条,以_score降序排序
二、timeout机制
在默认情况下,es并无timeout,如果某一次搜索特别慢,要花5分钟才能完成,那es也会等5分钟搜索完成之后才返回结果,这种情况下对于那些对时间敏感的应用很不利,timeout机制指定每个shard只能在timeout所指定的时间内将已搜索到的结果返回(可能是部分数据),这样就可以确保每次搜索都能在指定的timeout时间内返回数据,
举例说明,假如有6个shard,对某一次搜索请求每个shard都返回1000条数据,都会花费100秒。如果指定了timeout=1s,那些es会在1秒后返回60条数据(10*6)。
可以在查询时指定timeout值
GET /_search?timeout=10m
timeout=10ms(毫秒),timeout=1s(秒),timeout=1m(分)