# 値の型によって登録対象のフィールドを分けたい

**URL:** https://discuss.elastic.co/t/topic/306207
**Category:** 日本語による質問・議論はこちら
**Created:** [June 2, 2022, 8:57am UTC](https://discuss.elastic.co/t/topic/306207 "2022-06-02T08:57:05Z")
**Posts on this page:** 3
**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: [June 2, 2022, 8:57am UTC](https://discuss.elastic.co/t/topic/306207/1 "2022-06-02T08:57:05Z")

</div>

JSON形式のログを、logstashのjsonフィルターを使用して取り込んでおります。  
現状の問題として、ドキュメントにより同じフィールド名(以下、fieldA)でも数値型の場合と文字列型の場合があります。その場合、初回にドキュメントを取り込んだ際に、fieldAが数字の場合、数値型で動的にマッピングされますが、その後に数値以外の文字列がfieldAに設定されていた場合はマッピングエラーとなってしまいます。  
例えば、fieldAの値を事前に解析し、数字の場合はfieldA\_numberフィールド、その他の文字列の場合はfieldA\_textフィールドに格納するといったことは可能でしょうか？

なお、当該ドキュメントはキー名が多岐に渡るため、インデックステンプレートにて予め型を決めておくことが困難です

---

<div class="post-metadata">

### Author: ![Koji\_Kawamura](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/koji_kawamura/32/93938_2.png) [@Koji\_Kawamura](https://discuss.elastic.co/u/Koji_Kawamura)
#### Post date: [June 15, 2022, 9:41am UTC](https://discuss.elastic.co/t/topic/306207/2 "2022-06-15T09:41:36Z")

</div>

@t-nakata さん、

なかなか厄介な状況ですね。

他に解決方法があるような気もしますが、興味本位で Logstash の ruby filter を使ってカスタムスクリプトを書いてみました。こちらからダウンロードできます。 [rename\_by\_data\_type.rb](https://gist.githubusercontent.com/ijokarumawak/5a9bab0137856aabd19b314caa86e7fa/raw/d23e4ee5f8413aa24526f3a5179ec61c767af0c3/rename_by_data_type.rb)

使用例:

```auto
filter {
  ruby {
    path => '/{path_of_the_ruby_script}/rename_by_data_type.rb'
    script_params => { 'field' => 'the_name_of_target_field' }
  }
}

```

実行時のイメージ:  
二件のメッセージが渡ってきて、同じフィールド名なのに型が違う場合のイメージです。型の名前を元々のフィールド名の末尾に追記するようにしています。

Input:

```json
[
{"values": {"fieldA": "a", "fieldB": "b", "fieldC": "c"}},
{"values": {"fieldA": 1, "fieldB": 2, "fieldC": 3}}
]

```

Output:

```json
[
{"values": {"fieldA_String": "a", "fieldB_String": "b", "fieldC_String": "c"}},
{"values": {"fieldA_Integer": 1, "fieldB_Integer": 2, "fieldC_Integer": 3}}
]

```

---

<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: [July 13, 2022, 9:42am UTC](https://discuss.elastic.co/t/topic/306207/3 "2022-07-13T09:42:17Z")

</div>

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