web-dev-qa-db-ja.com

elasticsearchですべてのインデックスのすべてのドキュメントにタイムスタンプフィールドを追加する方法は?

Elasticsearchの専門家、

すべてのインデックス(およびすべてのドキュメントタイプ)に追加されたすべてのドキュメントに_timestampフィールドを挿入するようにElasticSearchに指示する簡単な方法を見つけることができませんでした。

特定のタイプの例を見る: http://www.elasticsearch.org/guide/reference/mapping/timestamp-field/

特定のタイプのすべてのインデックスの例も参照してください(_allを使用): http://www.elasticsearch.org/guide/reference/api/admin-indices-put-mapping/

しかし、インデックスとタイプに関係なく追加されるすべてのドキュメントについて、デフォルトで追加するドキュメントを見つけることができません。

33
Gautam M

これを行うには、インデックスの作成時に指定します。

$curl -XPOST localhost:9200/test -d '{
"settings" : {
    "number_of_shards" : 1
},
"mappings" : {
    "_default_":{
        "_timestamp" : {
            "enabled" : true,
            "store" : true
        }
    }
  }
}'

これにより、インデックスに入れるすべてのものに対して _ timestamp が自動的に作成されます。次に、_timestampフィールドを要求するときに何かにインデックスを付けた後に返されます。

33

Elasticsearchは、インデックス付けされるドキュメントへのタイムスタンプの自動追加をサポートしていましたが、2.0.0では deprecatedこの機能

バージョン5.5以降 ドキュメント

_timestampおよび_ttlフィールドは廃止され、現在は削除されています。 _timestampの代わりとして、アプリケーション側で現在のタイムスタンプを通常の日付フィールドに入力する必要があります

36
FluxLemur

インデックス付けのタイムスタンプを取得する別の方法を追加します。これが誰かを助けることを願っています。

Ingest pipelineを使用して、ドキュメントのインデックス作成時にタイムスタンプを追加できます。サンプルの例を次に示します。

PUT _ingest/pipeline/indexed_at
{
  "description": "Adds indexed_at timestamp to documents",
  "processors": [
    {
      "set": {
        "field": "_source.indexed_at",
        "value": "{{_ingest.timestamp}}"
      }
    }
  ]
}

以前は、エラスティック検索は名前付きパイプラインを使用していました。これは、ドキュメントの書き込み/インデックス作成に使用されるエラスティック検索エンドポイントで「パイプライン」パラメータを指定する必要があるためです。 (参照: link )アプリケーション側でエンドポイントを変更する必要があるため、これは少し面倒でした。

Elastic Searchバージョン6.5以上では、index.default_pipeline設定を使用してインデックスのデフォルトパイプラインを指定できるようになりました。 (詳細については link を参照)

デフォルトのパイプラインを設定する方法は次のとおりです。

PUT ms-test/_settings
{
  "index.default_pipeline": "indexed_at"
}

ES 6.5にアップグレードしなかったので、まだ試していませんが、上記のコマンドは動作するはずです。

3
manoj

最初にインデックスと、フィールドやデータ型などのインデックスのプロパティを作成し、残りのAPIを使用してデータを挿入します。

以下はフィールドプロパティでインデックスを作成する方法です。kibanaコンソールで次を実行します

`PUT /vfq-jenkins
{
"mappings": {
"properties": {
"BUILD_NUMBER": { "type" : "double"},
"BUILD_ID" : { "type" : "double" },
"JOB_NAME" : { "type" : "text" },
"JOB_STATUS" : { "type" : "keyword" },
"time" : { "type" : "date" }
 }}}`    

次のステップは、そのインデックスにデータを挿入することです。curl -u elastic:changeme -X POST http:// elasticsearch:9200/vfq-jenkins/_doc /?pretty -H Content-Type:application/json -d '{"BUILD_NUMBER": "83"、 "BUILD_ID": "83"、 "JOB_NAME": "OMS_LOG_ANA"、 "JOB_STATUS": "SUCCESS"、 "time ":" 2019-09-08'T'12:39:00 "} '

0
Navaganesh R