例えばこんなふうに日本語のタグを配列で入れるとする。
{
"tags": ["あとで読む", "これはひどい", "プログラミング"]
}
この配列の中身が分かち書きされてしまうのを避けたいときに、mappings
の設定をどうすれば良いのか分からなかった。あ、日本語の検索用に kuromoji を入れている状態ね。
配列だから type
は array
かな?と思って書いてみてもダメだった。array
なんてねーよ、と Elasticsearch から怒られてしまう。
{
"properties": {
"tags": {
"type": "array",
"index": "not_analyzed"
}
}
}
どうやら正解は(配列の中身が文字列だから?)type
を string
にしてやれば良かったようだ。
{
"properties": {
"tags": {
"type": "string",
"index": "not_analyzed"
}
}
}
これで「これはひどい」を「これは」と「ひどい」ではなく、「これはひどい」として、Kibana の Term で集計できるようになった。ホントにこれで良いのかどうか、根拠を見いだせていないのだけど、とりあえず現状は期待通りに動いている。