LoginSignup
35
31

More than 5 years have passed since last update.

Elasticsearchで現在時刻を基準に範囲検索する

Last updated at Posted at 2018-09-30

Elasticsearchでは現在時刻を基準に範囲検索することが可能です。
公式ドキュメントを見ながら範囲検索について少し検証してみたのでそのメモです。

環境

Elasticsearch 6.4.0

検索対象として以下のようなデータを準備しておきます。

{"date": "2018-09-30T00:00:00+09:00"},
{"date": "2018-09-30T00:01:00+09:00"},
...
{"date": "2018-09-30T23:59:00+09:00"}

日付計算に利用できるパラメータ

日付計算には以下のパラメータを利用できます。

パラメータ 意味
now 現在時刻
y
M
w
d
h/H
m
s

参考:Date Math

現在時刻から加減算する

nowに対して+または-することで、現在時刻に対して加減算を行うことが出来ます。
複数のパラメータを利用したい場合は、それぞれに対して+または-を指定してください。

現在時刻から1時間後まで
{
  "query": {
    "range": {
      "date": {
        "gte": "now",
        "lt": "now+1h"
      }
    }
  }
}
2.5時間前から現在時刻まで
{
  "query": {
    "range": {
      "date": {
        "gte": "now-2h-30m",
        "lt": "now"
      }
    }
  }
}

現在時刻から月や日の初めを計算する

nowに対して/の後ろにパラメータを指定することで、そのパラメータの初めの日時を計算することが出来ます。
例えば、/dを指定した場合は今日の00:00:00.000になります。
ただし、Elasticsearchは時刻をUTCで扱っていますので、JSTの場合は"time_zone": "+09:00"を指定しないとJSTに変換された結果、今日の09:00:00.000を指定したことになってしまいますので注意してください。

月の初め以降
{
  "query": {
    "range": {
      "date": {
        "gte": "now/M",
        "time_zone": "+09:00"
      }
    }
  }
}
日の初めから現在時刻まで
{
  "query": {
    "range": {
      "date": {
        "gte": "now/d",
        "lt": "now",
        "time_zone": "+09:00"
      }
    }
  }
}

特定の時刻を指定する

現在時刻から特定の時刻(例えば12時など)を指定する場合、日の始めの計算と時刻の加算を組み合わせることで実現できます。

今日の12時以降
{
  "query": {
    "range": {
      "date": {
        "gte": "now/d+12h",
        "time_zone": "+09:00"
      }
    }
  }
}

これをKibanaのフィルターとして設定すれば、VisualizeやDashboardを開いた時刻を基準に特定時刻のデータを利用することが出来ます。
例えば、Visualizeで前日の12:00から今日の12:00までのデータを利用したい場合、以下のクエリをフィルターとして設定することで、Visualizeを開いた日を基準に対象データを絞り込むことが出来ます。

前日の12時~今日の12時
{
  "query": {
    "range": {
      "date": {
        "gte": "now-1d/d+12h",
        "lt": "now/d+12h",
        "time_zone": "+09:00"
      }
    }
  }
}
35
31
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
35
31