# 文字列のMapping組み合わせについて\[text or keyword\]

**URL:** <https://discuss.elastic.co/t/mapping-text-or-keyword/167559>\
**Category:** 日本語による質問・議論はこちら\
**Created:** [February 8, 2019, 1:43am UTC](https://discuss.elastic.co/t/mapping-text-or-keyword/167559 "2019-02-08T01:43:48Z")\
**Posts on this page:** 5\
**Page:** 1

<div class="post-metadata">

**Author:** ![mukai](https://avatars.discourse-cdn.com/v4/letter/m/f08c70/32.png) [@mukai](https://discuss.elastic.co/u/mukai)\
**Post date:** [February 8, 2019, 1:43am UTC](https://discuss.elastic.co/t/mapping-text-or-keyword/167559/1 "2019-02-08T01:43:48Z")

</div>

文字列をMapping登録する場合、それぞれ一長一短はあると思いますが、どのような場合にどの組み合わせで登録しますか？

また、複数の案を採用した場合、文字列がどのデータ型で入っているか利用者には分りづらいと思うのですが、どのように対処されていますか？  
(下記のMapping例だと、データ型は下記のようになるが、使う側からすれば分りづらい。)  
text型「field01」「field02.text」「field03」  
keyword型「field01.keyword」「field02」「field04」

他の方はどの様にされているか、もし宜しければ教えてください。

```
    /* 案1:text型にkeyword型を追加(デフォルト設定) */
    "field01": {
      "type": "text",
      "fields": {
        "keyword": {
          "type": "keyword",
          "ignore_above": 256
        }
      }
    },
    /* 案2:keyword型にtext型を追加 */
    "field02": {
      "type": "keyword",
      "ignore_above": 256,
      "fields": {
        "text": {
          "type": "text"
        }
      }
    },
    /* 案3:text型のみを指定 */
    "field03": {
      "type": "text"
    },
    /* 案4:keyword型のみを指定 */
    "field04": {
      "type": "keyword",
      "ignore_above": 256
    }

```

(参考URL) 各データ型とマルチフィールド  
[https://www.elastic.co/guide/en/elasticsearch/reference/current/text.html](https://www.elastic.co/guide/en/elasticsearch/reference/current/text.html)  
[https://www.elastic.co/guide/en/elasticsearch/reference/current/keyword.html](https://www.elastic.co/guide/en/elasticsearch/reference/current/keyword.html)  
[https://www.elastic.co/guide/en/elasticsearch/reference/current/multi-fields.html](https://www.elastic.co/guide/en/elasticsearch/reference/current/multi-fields.html)

---

<div class="post-metadata">

**Author:** ![r4-keisuke](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/r4-keisuke/32/9268_2.png) [@r4-keisuke](https://discuss.elastic.co/u/r4-keisuke)\
**Post date:** [February 8, 2019, 7:41am UTC](https://discuss.elastic.co/t/mapping-text-or-keyword/167559/2 "2019-02-08T07:41:29Z")

</div>

こんにちはー

目的と利用者次第かなと思いますけどねー  
検索など要らない、表示だけで使うならkeywordだけで十分ですよね。

全文検索もといるならtextでanalyzerをどんどんつけるから分離したほうがいいでしょう。  
でもそうなったらkeywordが必要な場面があるか？というところですかね。

個人的には検索のニーズとしてkeywordもtextも両方使ってるのですが  
昔の癖もあってfield.field1/field.field2のような構成にはまだしてないです。

あと利用者というのが定義がわからないのでなんともですが  
このドキュメントやフィールドをそのまま見せる必要があるなら検索用fieldを分けるなどしても良いかもしれませんね。

でも片付けられるので今後は  
基本はkeywordでlabel的な使い方にしてその中に複数のtextを配置するんだろうなーとは思ってます。

---

<div class="post-metadata">

**Author:** ![mnozawa](https://sea2.discourse-cdn.com/elastic/user_avatar/discuss.elastic.co/mnozawa/32/15091_2.png) [@mnozawa](https://discuss.elastic.co/u/mnozawa)\
**Post date:** [February 8, 2019, 7:52am UTC](https://discuss.elastic.co/t/mapping-text-or-keyword/167559/3 "2019-02-08T07:52:25Z")

</div>

textとkeywordの使い分け  
ニュース記事、会話文といった「自然言語」(多くの場合はいわゆる「文章」)に対してはtextを使い、固有名詞やラベルなどの「記号」に近い役割をするものにkeywordを使っています

複数typeの定義  
「基本系はtextでサブにkeyword」というようなルールを決めて運用しています  
今回の例では単に「field01/02」といったら必ずtextで「field01/02.keyword」がkeyword、というような感じです

私はtext型の中でもanalyzerを複数使い分けることが多いのですが、だいたいいつもこんな感じのルールで作っています

「field01」: text型でkuromoji analyzer  
「field01.ngram」: text型でngram analyzer  
「field01.keyword」: keyword型

どの型、analyzerを根元に割り当てるのかはシステムの個性ですね

---

<div class="post-metadata">

**Author:** ![mukai](https://avatars.discourse-cdn.com/v4/letter/m/f08c70/32.png) [@mukai](https://discuss.elastic.co/u/mukai)\
**Post date:** [February 11, 2019, 4:02am UTC](https://discuss.elastic.co/t/mapping-text-or-keyword/167559/4 "2019-02-11T04:02:18Z")

</div>

> 検索など要らない、表示だけで使うならkeywordだけで十分ですよね。  
> 基本はkeywordでlabel的な使い方にしてその中に複数のtextを配置するんだろうなーとは思ってます。

> 複数typeの定義  
> 「基本系はtextでサブにkeyword」というようなルールを決めて運用しています  
> 今回の例では単に「field01/02」といったら必ずtextで「field01/02.keyword」がkeyword、というような感じです

なるほど、お二方のルールを決めて運用するやり方、参考になりました。

私の場合、初めにデフォルト(案1)で、その後固有名詞のデータ量を減らすため案4を採用したので、  
下記の様に「field01」と「field04」の型がごっちゃになってしまいました。

/\* 案1:text型にkeyword型を追加(デフォルト設定) _/  
/_ 案4:keyword型のみを指定 \*/  
text型「field01」  
keyword型「field01.keyword」「field04」

今後は初めにルールを決めてから、テーブルを作ろうと思います。  
ありがとうございました。

---

<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 11, 2019, 4:02am UTC](https://discuss.elastic.co/t/mapping-text-or-keyword/167559/5 "2019-03-11T04:02:37Z")

</div>

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