togatttiのエンジニアメモ

過度な期待はしないでください.

日時範囲を指定して、Elasticsearchのデータを取得する。

curlで日時範囲を指定して、Elasticsearchのデータを取得する方法を示す。

取得対象のデータには、

(snip)
 "@timestamp" : "2017-08-16T16:51:06+09:00"
(snip)

のような感じで、タイムスタンプが設定されていることを前提とする。

curlで、タイムスタンプを日時の範囲を指定して、データを取得したい場合は、

$ curl -XGET 'localhost:9200/elsdata-2017.08.16/elsdata/_search' -d '{
    "query": {
        "range" : {
            "@timestamp" : {
                "gte" : "2017-08-16T16:18:00+09:00", "lte": "now", "format" : "date_time_no_millis"
            }
        }
    }
}'

という感じで、JSONを渡してあげると取得できる。

gteとlteを指定することで、2017-08-16T16:18:00+09:00から現在までのデータを取得することできる。

タイムスタンプの形式によっては、formatを設定する必要があるので、ここから条件を満たすものを選び設定する。

また、10000件以上のデータを一度に取得したい場合は、scrollとsizeを指定して、リクエストすると取得できる。

以下の例は、30000万件のデータを取得する場合

$ curl -XGET 'localhost:9200/elsdata-2017.08.16/elsdata/_search?scroll=1m&size=30000&pretty' -d '{
    "query": {
        "range" : {
            "@timestamp" : {
                "gte" : "2017-08-16T16:18:00+09:00", "lte": "now", "format" : "date_time_no_millis"
            }
        }
    }
}'