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

#1

文字列を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/keyword.html
https://www.elastic.co/guide/en/elasticsearch/reference/current/multi-fields.html

(Sunggyu Kei Rhie) #2

こんにちはー

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

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

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

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

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

(Makoto Nozawa) #3

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を根元に割り当てるのかはシステムの個性ですね

#4

検索など要らない、表示だけで使うなら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」

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

(system) closed #5

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