この記事はElasticsearch Advent Calendar 2015の10日目の記事です。
Elasticsearch Service とは
AWS が提供している Elasticsearch に特化したサービスです。
Elasticsearch の Config や Plugin は柔軟に設定できませんが、運用上のめんどくささから全て解放されるのでオススメします。
では、Elasticsearch を気軽に使用する環境がなければダッシュボードに行ってドメインを作成してください。
Amazon Elasticsearch Service dashboard
Configure cluster
Node configuration にある Instance type を t2.micro.elasticsearch
に設定して無料枠の恩恵を受けましょう。その際 Storage configuration にある Storage type を EBS
にしてください。
Set up access policy
ここは自由にポリシーを設定してください。僕の場合はプロキシサーバをかましているため、特定のIPからのアクセスだけに公開して使用しています。
公開しても構わない人は Set the domain access policy to に Allow open access to the domain
を設定してください。
他は適当に進めてください。4ページくらいで作成が完了になって、数分まてばドメインがダッシュボードに作成されています。
ダッシュボードから作成されたドメインに遷移すると下記の画像のページに移ります。
矢印にあるリンクが Elasticsearch のエンドポイントとなります。仮に叩いてみて下記のJSONが返却されればOKです。
{
"status" : 200,
"name" : "Vivisector",
"cluster_name" : "123456789012:hogehoge",
"version" : {
"number" : "1.5.2",
"build_hash" : "62ff9868b4c8a0c45860bebb259e21980778ab1c",
"build_timestamp" : "2015-04-27T09:21:06Z",
"build_snapshot" : false,
"lucene_version" : "4.10.4"
},
"tagline" : "You Know, for Search"
}
解析方法
Elasticsearch で日本語の形態素解析をする場合、語句解析に Kuromoji プラグインを使用します。
Elasticsearch のv2からはデフォルトで Kuromoji プラグインは組み込まれるようになりますが、v2未満の場合は手動でインストールしなければなりません。
が、Elasticsearch Service (v1.5.2) では標準で準備されています。マジ神。(手動インストールも簡単ですけどね)
手動インストールの場合
$ bin/plugin --install elasticsearch/elasticsearch-analysis-kuromoji/2.5.0
$ echo 'index.analysis.analyzer.default.type: custom' >> config/elasticsearch.yml
$ echo 'index.analysis.analyzer.default.tokenizer: kuromoji_tokenizer' >> config/elasticsearch.yml
_analyze
を使用して解析する
$ curl -XGET "localhost:9200/_analyze?analyzer=kuromoji&pretty" -d "こんにちわ、世界"
{
"tokens" : [ {
"token" : "こんにちわ",
"start_offset" : 0,
"end_offset" : 5,
"type" : "word",
"position" : 1
}, {
"token" : "世界",
"start_offset" : 6,
"end_offset" : 8,
"type" : "word",
"position" : 2
} ]
}
_analyze?analyzer=kuromoji" -d "こんにちわ、世界"
というリクエストを送信すればそれだけで解析してくれます。
非常に簡単に日本語を分解してくれる良い奴ですが、できれば品詞の情報も欲しいですね。まぁ、それはしょうがないということにしましょう。
おまけ:品詞分解したい場合
あるエンドポイントで形態素解析で品詞分解したいのならば elasticsearch-extended-analyze を使用しましょう。
インストールすれば下記のように使用できます。(サンプルより)
curl -XPOST 'localhost:9200/_extended_analyze?pretty' -d '
{
"tokenizer" : "kuromoji_tokenizer",
"filters" : ["kuromoji_baseform"],
"text" : "寿司が美味しかった",
"use_short_attr" : true,
"attributes" : ["BaseFormAttribute", "PartOfSpearchAttribute", "ReadingAttribute"]
}'
おまけ:Elasticsearch以外の形態素解析サーバが欲しい場合
Elasticsearchでもよいですが、それ以外でしたらGo言語でかかれた形態素解析用のサーバアプリがあります。
ikawaha/kagome - Kagome Japanese Morphological Analyzer
kagomeはKuromojiベースの形態素解析が可能です。Goをやっている方で形態素解析をしたい方にはおすすめです。
なかなか使用感は非常によいですが、辞書のロードでメモリを喰うため、共有メモリとして辞書をロードするようにしましょう。
おわりに
Elasticsearchはログ解析用の記事が多い気がしますが、いろいろ着眼点を変えれば使用できる機会が多くなります。
また、自分でプラグインを作成することも可能なので、アプリケーションロジックでなく、Elasticsearch側にロジックを含めてしまうことも簡単なのです。
今後はそっちをどんどんやっていこうかなと密かに思っていたりします。