Elasticsearchで日付範囲指定の検索、削除方法を解説

Elasticsearchで日付範囲指定の検索、削除方法を解説

どうもこんにちは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の場合の使用例を以下に示します。

  1. now+1h → 2020-01-01 13:00:00(現時刻から1時間後)
  2. now-1h → 2020-01-01 11:00:00(現時刻から1時間前)
  3. now-1h/d → 2020-01-01 00:00:00(現時刻から1時間前の日時の時間切り捨て)
  4. 2020.02.01\|\|+1M/d → 2020-03-01 00:00:00(2020.02.01から1ヶ月後)
  5. 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についてのもっと知りたい人向け~関連記事!

全文検索エンジンElasticsearchについてまとめてみました

Elasticsearchの設定方法について簡単に解説

Elasticsearchのバックアップ方法について解説します。(スナップショット、リストア)

Elasticsearchのインデックスには大文字は含めてはいけない