初めてここで質問させていただきます。
悩みはタイトル通りなのですが、これまでkibana4やElasticSearch4.xで実現できていたことが、ver5でできずに困っております。
実現したいこと
- kibanaのvisualizeで、Aggregation -> Termで形態素解析結果のフィールドを選択し、集計できるようにしたい。
- 以下のmapping例で、text.jaを選択できるようにしたい
- kuromojiで形態素解析する場合としない場合の両方を利用したいので、Multi Fieldを使いたい
- v5でもこんな感じのことがしたい
- http://qiita.com/harukasan/items/4ec517d8d96f557367e1
いろいろelasticsearchのmappingをいじったのですが、、、
形態素解析自体はできているようなのですが、現時点では、kibana5からそのフィールドをvisualize時のfieldで選択できません。
mapping定義
elasticsearch4のマッピング定義(抜粋)
ElasticSearch4の時のmapping定義は以下の通りです。
{
"template": "*",
"mappings": {
"_default_": {
"_all": {
"analyzer": "ja_analyzer"
},
"dynamic_templates": [{
"analyzed_fields": {
"match_pattern": "regex",
"match": ".*text.*|.*text",
"mapping": {
"type": "string",
"fields": {
"raw": {
"type": "string",
"index": "not_analyzed"
},
"facet": {
"type": "string",
"analyzer": "facet_analyzer"
},
"ja": {
"type": "string",
"analyzer": "ja_analyzer"
}
}
}
}
}, {
"string_template": {
"match_mapping_type": "string",
"mapping": {
"type": "string",
"fields": {
"raw": {
"type": "string",
"index": "not_analyzed"
}
}
}
}
}]
}
}
}
elasticsearch5のマッピング定義(抜粋)
ElasticSearch5の時のmapping定義は以下の通りです。
5では、stringやらindex周りの書き方に変更があったので、以下のように変えています。
{
"template": "*",
"mappings": {
"_default_": {
"_all": {
"analyzer": "ja_analyzer"
},
"dynamic_templates": [{
"analyzed_fields": {
"match_pattern": "regex",
"match": ".*text.*|.*text",
"mapping": {
"type": "text",
"fields": {
"raw": {
"type": "keyword"
},
"ja": {
"type": "text",
"analyzer": "ja_analyzer"
},
"yomi": {
"type": "text",
"analyzer": "yomi_analyzer"
}
}
}
}
}, {
"string_template": {
"match_mapping_type": "string",
"match": "*",
"mapping": {
"type": "keyword"
}
}
}]
}
}
}
kibana4ではtext.rawもtext.jaも両方ともaggrigationの対象となっていたのでいろいろ集計できました。
しかし残念ながら、kibana5ではanalyzed された領域がaggregatable に対してtrueになりません。
なお、elasticsearch上にtext.raw、text.ja、text.yomiというフィールド自体は作成されており、 analyzed が有効(true)となっていますが、text.raw だけがaggregatable が有効(true)になっています。そして、もちろんtext.raw のanalyzed はfalseです。
以上、解決方法をご存知の方がいらっしゃったらご教示よろしくお願いします。