咱們若是發出一個搜索請求的話,會拿到一堆搜索結果網站
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