Elasticsearchで日付範囲指定の検索、削除方法を解説
- 2019.11.03 (更新日: 2020.10.04)
- Elasticsearch ITノウハウ
- インフラ技術

どうもこんにちはkoheiです。
インデックス内のデータ量が多くなった場合に日付で範囲指定してデータを削除したいという場合がありました。
ElasticsearchではRest APIが用意されていて、結構使うと思ったのでメモとして書きたいと思います。
日付計算式(DATE MATH)
日付計算式は「now」か「日付の後ろに||をつけた文字列(使用例の4番目)」と一緒に使います。
使い方は以下のように「+」「-」「/」と日時書式指定子を使用します。
+1h → 1時間後
-1d → 1時間前
/d → 時間を切り捨て
日時書式指定子は以下を使用可能です。
日時書式指定子 | 説明 |
---|---|
y | 年 |
M | 月 |
w | 週 |
d | 日 |
h | 時 |
H | 時 |
m | 分 |
s | 秒 |
使用例
現在時刻が2020-01-01 12:00:00の場合の使用例を以下に示します。
- now+1h → 2020-01-01 13:00:00(現時刻から1時間後)
- now-1h → 2020-01-01 11:00:00(現時刻から1時間前)
- now-1h/d → 2020-01-01 00:00:00(現時刻から1時間前の日時の時間切り捨て)
- 2020.02.01\|\|+1M/d → 2020-03-01 00:00:00(2020.02.01から1ヶ月後)
- now-1h+30m → 2020-01-01 11:30:00(現時刻から1時間前の時間から30分後)
※5.のように-1hに続けて+30mを記載することも可能です。
範囲クエリー(Range query)
Elasticsearchでは検索時に「query」を指定し、条件で絞ることができます。
今回は「range」を使用した日付検索、削除について解説します。
本章以降の検索、削除の例で示している「lte」以外にも以下のパラメータを指定することが可能です。「gt」、「gte」、「lt」、「lte」を使用する場合は上記で述べた日付計算式を使用します。
gt → より大きい(現時点は含めない)。日付計算式を使用可能
gte → 以上。日付計算式を使用可能
lt → より小さい(現時点は含めない)。日付計算式を使用可能
lte → 以下。日付計算式を使用可能
format → クエリの日付値の変換に使用される日付形式。デフォルトでは、Elasticsearchはのマッピングで提供される日付形式を使用します。
relation → 範囲クエリが範囲フィールドの値とどのように一致するかを示します。指定可能な値はINTERSECTS (Default)、CONTAINS、WITHINです。※具体的に試せてません。
time_zone → クエリの日付値をUTCに変換するために使用される協定世界時(UTC)オフセットまたはIANAタイムゾーン。※具体的に試せてません。JSTの場合は”time_zone”: “+09:00″を指定するのだろうか?
boost → クエリの関連性スコアを増減するために使用される浮動小数点数。デフォルトは1.0です。※具体的に試せてません。
日付で絞って検索
条件指定で検索する場合はRest API「_search」を使用します。
以下ではインデックス「test01-2019.10.30」内のドキュメントを条件で絞った例を示します。
・「@timestamp」が現在より10分前以降のドキュメントを検索してます。
curl -XGET http://localhost:9200/test01-2019.10.30/_search { "query": { "range": { "@timestamp": { "lte": "now-10m" } } }, "_source": "@timestamp" }
日付で絞って削除
条件指定で削除する場合はRest API「_delete_by_query」を使用します。
以下ではインデックス「test01-2019.10.30」内のドキュメントを条件で削除する例を示します。
・「@timestamp」が現在より10分前以降のドキュメントを削除してます。
curl -XPOST http://localhost:9200/test01-2019.10.30/_delete_by_query { "query": { "range": { "@timestamp": { "lte": "now-10m" } } } }
結論
範囲クエリーを使用した日付の検索、削除が可能。範囲指定する場合は日付計算式が使用可能。
人気記事:【最新】Elastic Stack学習におすすめの本5選
Elasticsearchについてのもっと知りたい人向け~関連記事!
