tl;dr

Elasticsearch の日付フォーマットにおいて 1 日の時間(24 時間)を指定する場合に何も考えずに以下のように指定すると…

YYYY-MM-dd HH:mm:ss

以下のようにエラーが出てしまうことがある。これはフォーマットタイプに Date を指定している際に時間が 01 ~ 24 なドキュメントを放り込んでしまった場合のエラーのようだ。

"error":"MapperParsingException[failed to parse [DATE_TIME]]; nested: MapperParsingException[failed to parse date field [2015-11-21 24:00:00], tried both date format [YYYY-MM-dd HH:mm:ss], and timestamp number with locale []]; nested: IllegalFieldValueException[Cannot parse "2015-11-21 24:00:00": Value 24 for hourOfDay must be in the range [0,23]]; ","status":400

これをどんな風に解決しようかと悩んでいたら以下のドキュメントに書かれてた。

ドキュメントをちゃんと読みましょう事案。

メモ

ドキュメント抜粋

こちらより抜粋。

20151123184610

どうやら k を利用するらしい。

日付フォーマット(0 ~ 23)

うっかり設定してしまうフォーマット。

curl -XPUT 'localhost:9200/sample_index' -d '
{
    "mappings" : {
      "sample_type" : {
        "properties" : {
          "DATE_TIME" : {
            "format" : "YYYY-MM-dd HH:mm:ss","type" : "date"
          }
        }
      }
    }
  }'

日付フォーマット(1 ~ 24)

1 ~ 24 時を表現したい場合。

curl -XPUT 'localhost:9200/sample_index' -d '
{
    "mappings" : {
      "sample_type" : {
        "properties" : {
          "DATE_TIME" : {
            "format" : "YYYY-MM-dd kk:mm:ss","type" : "date"
          }
        }
      }
    }
  }'

以上

なるほど、なるほど。

元記事はこちら

(超メモ)Elasticsearch の日付フォーマットで 1 ~ 24 時を扱う