一、_search結果
1、ES語句
GET /product/_search
2、結果
{
"took" : 1,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 3,
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "product",
"_type" : "_doc",
"_id" : "1",
"_score" : 1.0,
"_source" : {
"name" : "xiaomi shouji",
"desc" : "niubi quanwangtong"
}
}
]
}
}
3、結果分析
字段 | 解釋 |
---|---|
took | 此次搜索請求消費了多少時間(ms) |
timed_out | 搜索超時時間,具體含義下面說 |
_shards.total | shard的總個數 |
_shards.successful | shard的成功數, |
_shards.failed | 壞掉的shard個數。primary 和 replica全部掛掉纔會產生failed數,代表這個shard的index完全不可用。 |
hits.total.value | 此次搜索請求返回了多少條document |
hits.max_score | 此次搜索的所有結果中,最大的相關度分數是多少 |
hits.hits | 此次請求返回的document,默認前10條。按照相關度_score降序排序 |
二、timeout機制
1、用法
GET /search?timeout=1s/ms/m
2、demo
GET /_search?timeout=10ms
GET /test_index/_search?timeout=10s
GET /product/_search?timeout=10m
3、詳細說明
- 默認查詢都沒設置timeout
- 若設置了則規則是如下
假設用戶查詢結果有10W條數據,但是需要10分鐘才能查詢完畢,但是用戶設置了1秒的timeout,那麼不管當前1s內一共查詢到了多少數據,都會返回這1s內的的數據,也就是說查詢超過1s了,ES會自動在1s的時候結束查詢,將當前的查詢結果返回給client。
4、總結
- timeout機制可以防止N個請求進來阻塞在那裏
- timeout導致搜索的數據可能不是全的,也可能是全的