雑文発散

«前の日記(2015-06-04) 最新 次の日記(2015-06-06)» 編集
過去の日記

2015-06-05 [長年日記]

[Elasticsearch] Elasticsearch の配列へのマッピングはどうすれば良いのだろう?と悩んでいた

例えばこんなふうに日本語のタグを配列で入れるとする。

{
  "tags": ["あとで読む", "これはひどい", "プログラミング"]
}

この配列の中身が分かち書きされてしまうのを避けたいときに、mappings の設定をどうすれば良いのか分からなかった。あ、日本語の検索用に kuromoji を入れている状態ね。

配列だから typearray かな?と思って書いてみてもダメだった。array なんてねーよ、と Elasticsearch から怒られてしまう。

{
  "properties": {
    "tags": {
      "type": "array",
      "index": "not_analyzed"
    }
  }
}

どうやら正解は(配列の中身が文字列だから?)typestring にしてやれば良かったようだ。

{
  "properties": {
    "tags": {
      "type": "string",
      "index": "not_analyzed"
    }
  }
}

これで「これはひどい」を「これは」と「ひどい」ではなく、「これはひどい」として、Kibana の Term で集計できるようになった。ホントにこれで良いのかどうか、根拠を見いだせていないのだけど、とりあえず現状は期待通りに動いている。