Elasticsearch的timeout機制與_search結果字段釋義

一、_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導致搜索的數據可能不是全的,也可能是全的
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章