4

yyyy-MM-dd HH:mm:ssElasticsearch にフォーマット内の文字列を日付フィールドとして認識させようとしています。動的な日付形式を作成し、それをデフォルトのマッピングに適用しました。最初のタイプのドキュメントにインデックスを付けると、うまく機能します。データがこの形式である新しいフィールドはすべて、日付フィールドとして初期化されます。

問題は、新しいタイプのドキュメントを作成しようとしたときに発生しますが、最初のタイプと同じ名前の日付形式フィールドがあります。これらは不正な日付エラーで失敗します。

デモ用の Kibana コマンドのセットの例を次に示します。

DELETE /datetest

PUT /datetest

PUT /datetest/_mapping/_default_
{
  "dynamic_date_formats" : ["yyyy-MM-dd HH:mm:ss"]
}

PUT /datetest/doc/1
{
  "date" : "2015-01-01 12:00:00"
}

# This one works fine
PUT /datetest/otherdoc/1
{
  "otherdate" : "2015-01-01 12:00:00"
}

# This one does not
PUT /datetest/otherdoc/2
{
  "date" : "2015-01-01 12:00:00"
}

最後のコマンドで次のエラーが発生します。 "Invalid format: \"2015-01-01 12:00:00\" is malformed at \" 12:00:00\""

異なる型の同じ名前のフィールドは同じデータ型でなければならないことはわかっていますが、この場合は同じデータ型 (日付) にする必要があります。新しいタイプごとに手動でマッピングを作成することもできますが、ソース データに追加された新しいタイプを自動的にサポートするようにしたいと考えています。動的な日付形式が行うべきことのようです。ここで何か間違ったことをしていますか?

4

2 に答える 2

2

カスタム動的テンプレートを作成します。このようなもの:

PUT /datetest/_mapping/_default_
{
    "date_detection" : true,
    "dynamic_templates" : [
        {
            "dates" : {
               "match" : ".*date.*",
                "mapping" : {
                    "type" : "date",
                    "format" : 'yyyy-MM-dd HH:mm:ss'
                }
            }
        }
    ]
}

試してみました。うまくいくようです。これが役立つことを願っています:)

于 2015-12-17T16:02:02.873 に答える
1

私が考えることができるのは、動的テンプレートを追加することだけです:

PUT /datetest
{
  "mappings": {
    "_default_": {
      "date_detection": false,
      "dynamic_templates": [
        {
          "dates": {
            "match": ".*Date|date",
            "match_pattern": "regex",
            "mapping": {
              "type": "date",
              "format": "yyyy-MM-dd HH:mm:ss||dateOptionalTime"
            }
          }
        }
      ]
    }
  }
}

3 つのステートメントはすべて正常に実行されます。

PUT /datetest/doc/1
{ "date" : "2015-01-01 12:00:00" }
PUT /datetest/otherdoc/1
{ "otherdate" : "2015-01-01 12:00:00" }
PUT /datetest/otherdoc/2
{ "date" : "2015-01-01 12:00:00" }

動的テンプレートは、パターンに基づいてフィールド名を一致させようとします。dateまたはDateで終わる必要があります。

フォーマットだけが必要なのはわかっていますがyyyy-MM-dd HH:mm:ss、Elasticsearch が複数のものから 1 つを選択できるように、デフォルトのものも追加しました。

于 2015-12-17T16:06:14.457 に答える