# ドキュメントAPIにて、インデックス名に動的に日付を設定する方法

**URL:** <https://discuss.elastic.co/t/api/293513>\
**Category:** 日本語による質問・議論はこちら\
**Created:** [January 5, 2022, 9:58am UTC](https://discuss.elastic.co/t/api/293513 "2022-01-05T09:58:42Z")\
**Posts on this page:** 12\
**Page:** 1

<div class="post-metadata">

**Author:** ![t-nakata](https://avatars.discourse-cdn.com/v4/letter/t/8491ac/32.png) [@t-nakata](https://discuss.elastic.co/u/t-nakata)\
**Post date:** [January 5, 2022, 9:58am UTC](https://discuss.elastic.co/t/api/293513/1 "2022-01-05T09:58:42Z")

</div>

以下のドキュメントに示されるAPIにて、インデックス名に現在月を付与したいです

> **[Index API | Elasticsearch Guide \[7.16\] | Elastic](https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-index_.html)**

```auto
PUT my-index-000001/_doc/1?timeout=5m
{
  "@timestamp": "2099-11-15T13:12:00",
  "message": "GET /search HTTP/1.1 200 1070000",
  "user": {
    "id": "kimchy"
  }
}

```

上記APIにて、インデックス名を「my-index-000001」でなく、例えば「my-index-000001.MM」のような形で設定したいです。  
※MMは現在月  
MM部分は、動的に現在月が自動で設定されるようにしたいのですが、ドキュメントAPIで実現することは可能でしょうか。

---

<div class="post-metadata">

**Author:** ![Tomo\_M](https://avatars.discourse-cdn.com/v4/letter/t/848f3c/32.png) [@Tomo\_M](https://discuss.elastic.co/u/Tomo_M)\
**Post date:** [January 5, 2022, 11:19am UTC](https://discuss.elastic.co/t/api/293513/2 "2022-01-05T11:19:24Z")

</div>

類似の質問がありました。Date index name processorというものが使えそうです。

> [@Creating index on monthly basis](https://discuss.elastic.co/t/creating-index-on-monthly-basis/274762):
>
> Is there any way by which we can create index named \<prefix\>-yyyy.mm on the first day of every month and getting the alias pointed to this newly created index? I learned about date time but that changes the name only when the index rollover take places. I am using Rest High level java client to insert the Json messages into elastic search and kibana for visualization.

---

<div class="post-metadata">

**Author:** ![t-nakata](https://avatars.discourse-cdn.com/v4/letter/t/8491ac/32.png) [@t-nakata](https://discuss.elastic.co/u/t-nakata)\
**Post date:** [January 6, 2022, 9:28am UTC](https://discuss.elastic.co/t/api/293513/3 "2022-01-06T09:28:23Z")

</div>

ご回答ありがとうございます。期待通りの動作になりました。  
追加でもう一つ教えてください。

ドキュメント登録APIを実行した時、ドキュメントID(\_id)を現在時刻(YYYYMMDDhhmmss)のような形で付与したいです。上記の例では\_idとして「1」が登録されますが、Set processorにて\_idを上書きすることで実現できるのでないかと思っています。

```auto
    "processors": [
    {
        "set":{
            "field": "_id",
            "value": "XXXXXX"
        }
    }
   

```

この時に、上記XXXX部分をどのように書けばいいのかが分からず、ご教示頂けないでしょうか。また、他のprocessorを使えば出来るというのがあれば教えてください

---

<div class="post-metadata">

**Author:** ![Tomo\_M](https://avatars.discourse-cdn.com/v4/letter/t/848f3c/32.png) [@Tomo\_M](https://discuss.elastic.co/u/Tomo_M)\
**Post date:** [January 6, 2022, 5:10pm UTC](https://discuss.elastic.co/t/api/293513/4 "2022-01-06T17:10:45Z")

</div>

少し試してみました。

```auto
PUT _ingest/pipeline/test
{
  "processors" : [
    {
      "date" : {
        "field": "_ingest.timestamp",
        "target_field": "_id",
        "formats": ["ISO8601"],
        "output_format": "yyyyMMddhhmmss"
      }
    }
  ]
}

```

```auto
 "_id" : "20220106050835",

```

Set Processorでもできそうですが、日時をフォーマットすることができませんでした。

```auto
PUT _ingest/pipeline/test
{
  "processors" : [
    {
      "set" : {
        "value": "{{_ingest.timestamp}}",
        "field": "_id"
      }
    }
  ]
}

```

```auto
"_id" : "2022-01-06T17:08:01.715680196Z"

```

---

<div class="post-metadata">

**Author:** ![t-nakata](https://avatars.discourse-cdn.com/v4/letter/t/8491ac/32.png) [@t-nakata](https://discuss.elastic.co/u/t-nakata)\
**Post date:** [January 18, 2022, 12:11am UTC](https://discuss.elastic.co/t/api/293513/5 "2022-01-18T00:11:23Z")

</div>

ご回答ありがとうございます。  
Elasticsearchのバージョンを7.9を使用しているのですが、dateプロセッサーの「output\_format」が対応していないようです。要件的にバージョンアップすることが難しく、scriptプロセッサー等で代用可能でしょうか？  
また、\_ingest.timestampはUTCで保持されるかと思いますが、これをJSTで保持するようにすることは可能でしょうか？scripyプロセッサー等でJSTに変換したものを別フィールドに持たせるというようなことが出来ないかと思っております

---

<div class="post-metadata">

**Author:** ![Tomo\_M](https://avatars.discourse-cdn.com/v4/letter/t/848f3c/32.png) [@Tomo\_M](https://discuss.elastic.co/u/Tomo_M)\
**Post date:** [January 18, 2022, 1:00am UTC](https://discuss.elastic.co/t/api/293513/6 "2022-01-18T01:00:22Z")

</div>

そうだったのですね。確かにscript processorでも実現できそうです。date index name processorの部分も合わせてscript processorで実現することもできると思います。

---

<div class="post-metadata">

**Author:** ![t-nakata](https://avatars.discourse-cdn.com/v4/letter/t/8491ac/32.png) [@t-nakata](https://discuss.elastic.co/u/t-nakata)\
**Post date:** [January 18, 2022, 1:04am UTC](https://discuss.elastic.co/t/api/293513/7 "2022-01-18T01:04:14Z")

</div>

早々のご回答ありがとうございます。  
script processorでどのように記載すればいいかサンプルを頂くことは可能でしょうか？painlessにあまり明るくなく、ご教示頂けると幸いです

---

<div class="post-metadata">

**Author:** ![Tomo\_M](https://avatars.discourse-cdn.com/v4/letter/t/848f3c/32.png) [@Tomo\_M](https://discuss.elastic.co/u/Tomo_M)\
**Post date:** [January 18, 2022, 7:32am UTC](https://discuss.elastic.co/t/api/293513/8 "2022-01-18T07:32:32Z")

</div>

> **[Painless Scripting Language \[7.16\] | Elastic](https://www.elastic.co/guide/en/elasticsearch/painless/current/index.html)**

ドキュメントも充実してますし、まずは試してみて、うまく行かないところがあればまたこのforumで聞いてみるというのはどうでしょうか。そんなに複雑なスクリプトにはならないと思います。

---

<div class="post-metadata">

**Author:** ![Tomo\_M](https://avatars.discourse-cdn.com/v4/letter/t/848f3c/32.png) [@Tomo\_M](https://discuss.elastic.co/u/Tomo_M)\
**Post date:** [January 18, 2022, 12:20pm UTC](https://discuss.elastic.co/t/api/293513/9 "2022-01-18T12:20:21Z")

</div>

```auto
POST /_ingest/pipeline/_simulate
{
  "pipeline" :
  {
    "description": "_description",
    "processors": [
      {
        "set" : {
          "field" : "@timestamp",
          "value" : "{{_ingest.timestamp}}"
        }
      },
      {
        "script": {
          "lang": "painless",
          "source": "DateTimeFormatter dtf_id = DateTimeFormatter.ofPattern(\"yyyyMMddHHmmssSSSSSS\");DateTimeFormatter dtf_index = DateTimeFormatter.ofPattern(\"MM\"); ZonedDateTime now=ZonedDateTime.parse(ctx['@timestamp']).plusHours(9);ctx['_id'] = now.format(dtf_id);ctx['_index'] = 'my-index-' + now.format(dtf_index);ctx['@timestamp']=now.toString()"
        }
      }
      
    ]
  },
  "docs": [
    {
      "_index": "index",
      "_id": "id",
      "_source": {
        "foo": "bar"
      }
    },
    {
      "_index": "index",
      "_id": "id",
      "_source": {
        "foo": "rab"
      }
    }
  ]
}

```

---

<div class="post-metadata">

**Author:** ![t-nakata](https://avatars.discourse-cdn.com/v4/letter/t/8491ac/32.png) [@t-nakata](https://discuss.elastic.co/u/t-nakata)\
**Post date:** [February 3, 2022, 4:02am UTC](https://discuss.elastic.co/t/api/293513/10 "2022-02-03T04:02:44Z")

</div>

サンプルご提供ありがとうございます。こちらを参考にして問題を解決することができました。追加で申し訳ございませんがもう一点ご教示ください。  
KibanaのログインIDを動的にscriptプロセッサーやsetプロセッサーで取得することは可能でしょうか？  
下記のページを参照したところ、そのような記載は見受けられませんでしたが、もしも方法をご存じでしたらご教示頂けますと幸いです

> **[Ingest pipelines | Elasticsearch Guide \[master\] | Elastic](https://www.elastic.co/guide/en/elasticsearch/reference/master/ingest.html)**

---

<div class="post-metadata">

**Author:** ![Tomo\_M](https://avatars.discourse-cdn.com/v4/letter/t/848f3c/32.png) [@Tomo\_M](https://discuss.elastic.co/u/Tomo_M)\
**Post date:** [February 4, 2022, 9:45am UTC](https://discuss.elastic.co/t/api/293513/11 "2022-02-04T09:45:41Z")

</div>

ぱっと見たところ、[Set security user processor](https://www.elastic.co/guide/en/elasticsearch/reference/master/ingest-node-set-security-user-processor.html)がそれでしょうか？使ったことがないので分かりませんが…。

---

<div class="post-metadata">

**Author:** ![system](https://us1.discourse-cdn.com/elastic/original/3X/1/a/1ac57faf039f6b580b3f104ef42a2a89e41014de.png) [@system](https://discuss.elastic.co/u/system)\
**Post date:** [March 4, 2022, 9:45am UTC](https://discuss.elastic.co/t/api/293513/12 "2022-03-04T09:45:58Z")

</div>

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.
