🤖

🤖

:gijutsu_burogu:

Elasticsearchのタイムアウト設定

Elasticsearchのタイムアウト設定とは

Elasticsearch側で設定するタイムアウトで、下図②の時間に対するタイムアウト設定のこと。

ドキュメントには以下のように示されています。 タイムアウト時はエラーを返却するわけでなく時間内に蓄積された検索ヒットで結果を返却します。

A search timeout, bounding the search request to be executed within the specified time value and bail with the hits accumulated up to that point when expired. Search requests are canceled after the timeout is reached using the Search Cancellation mechanism. Defaults to no timeout. See Time units.

www.elastic.co

内部的には以下のAPIによりキャンセルが行われているようです。

www.elastic.co

クライアント側ではレスポンスタイムアウト、コネクションタイムアウトを設定することがあります。 図で①+②+③でタイムアウト判定するのがレスポンスタイムアウト、図では示せていないがコネクション接続でのタイムアウト判定するのがコネクションタイムアウト

クライアント側でレスポンスタイムアウトを設定している時は、その値より小さい値をElasticsearchのタイムアウト設定をすると良いでしょう。 検索結果が欠損するのを許容できレスポンスタイムの99%パーセンタイルの改善の際などに有用です。

Elasticsearchのタイムアウト設定方法

# request
GET /twitter/_search
{
    "timeout": "1s", // "500ms", "3s"という形式
    "query" : {
        "term" : { "user" : "kimchy" }
    }
}

# response
{
    "took": 1,
    "timed_out": false, // タイムアウトが発生したかどうか
    "_shards":{
        "total" : 1,
        "successful" : 1,
        "skipped" : 0,
        "failed" : 0
    },
    "hits":{
        "total" : {
            "value": 1,
            "relation": "eq"
        },
        "max_score": 1.3862944,
        "hits" : [
            {
                "_index" : "twitter",
                "_type" : "_doc",
                "_id" : "0",
                "_score": 1.3862944,
                "_source" : {
                    "user" : "kimchy",
                    "message": "trying out Elasticsearch",
                    "date" : "2009-11-15T14:12:12",
                    "likes" : 0
                }
            }
        ]
    }
}