elasticsearch學習筆記(二十一)——Elasticsearch _search結果的含義以及timeout機制

咱們若是發出一個搜索請求的話,會拿到一堆搜索結果網站

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

一、_search查詢返回結果數據含義分析

took: 整個搜索請求花費了多少毫秒
timed_out:表示請求是否超時
hits.total: value表示返回結果的總數,relation表示關係 例如通常是eq表示相等
hits.max_score: 表示本次搜索的全部結果中,最大的相關度分數是多少,每一條document對於search的相關度,越相關,_score分數就越大,排位就越靠前
hits.hits: 表示查詢出來document的結果集合
shards: total表示打到的全部分片,successful表示打到的分片中查詢成功的分片,skipped表示打到的分片中跳過的分片,failed表示打到的分片中查詢失敗的分片code

二、search timeout機制

由於ES默認是沒有timeout的,因此先描述一下場景假設咱們有些搜索應用,對時間是很敏感的,好比電商網站,你不能讓用戶等個10分鐘,若是那樣的話,人家早就走了,不來買東西了。blog

因而咱們就須要有timeout機制,指定每一個shard,就只能在timeout時間範圍內,將搜索到的部分數據(也可能全都搜索到了),直接返回給客戶端,而不是等到全部數據全都搜索出來之後在返回。圖片

這樣就能夠確保說,一次搜索請求能夠在用戶指定的timeout時長內完成,爲一些時間敏感的搜索應用提供良好的支持。ip

注意:ES在默認狀況下是沒有所謂的timeout的,好比說若是你的搜索特別慢,每一個shard都要花好幾分鐘才能查詢出來全部的數據,那麼你的搜索請求也會等待好幾分鐘以後纔會返回。
下面畫圖簡單描述一下timeout機制
圖片描述it

相關文章
相關標籤/搜索