この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。
はじめに
[新機能]Amazon Elasticsearch Serviceがリリースされました!でお伝えした通り、Amazon Elasticsearch Service(Amazon ES)はICU AnalysisとKuromojiをサポートしています。最初からKuromojiをサポートしているというのが本当にナイス。
そんなわけで、Amazon ESで、Kuromojiを使って日本語全文検索をしてみました。
やってみた
まずは、Kuromojiをtokenizer及びanalyzerとして使うIndexを作成します。
$ curl -XPOST 'http://search-myes-hoge.ap-northeast-1.es.amazonaws.com/kuromoji/' -d'
{
"index":{
"analysis":{
"tokenizer" : {
"kuromoji" : {
"type" : "kuromoji_tokenizer"
}
},
"analyzer" : {
"analyzer" : {
"type" : "custom",
"tokenizer" : "kuromoji"
}
}
}
}
}'
そしてデータを投入してみます。以下のように、3つのデータを入れました。
$ curl -XPOST 'http://search-myes-hoge.ap-northeast-1.es.amazonaws.com/kuromoji/data/' -d '
{
"title" : "梶さんの秘密のメモ",
"text" : "コカコーラ大好き"
}'
{"_index":"kuromoji","_type":"data","_id":"AVAmDgheeFCp6h-hHJoZ","_version":1,"created":true}
$ curl -XPOST 'http://search-myes-hoge.ap-northeast-1.es.amazonaws.com/kuromoji/data/' -d '
{
"title" : "渡辺さんの秘密のメモ",
"text" : "毎週末自転車乗ってる"
}'
{"_index":"kuromoji","_type":"data","_id":"AVAmDbFReFCp6h-hHJoY","_version":1,"created":true}
$ curl -XPOST 'http://search-myes-hoge.ap-northeast-1.es.amazonaws.com/kuromoji/data/' -d '
{
"title" : "佐々木の秘密のメモ",
"text" : "自転車持ってるけど乗ってない、コーラよりビール好き"
}'
{"_index":"kuromoji","_type":"data","_id":"AVAmEiN8eFCp6h-hHJoa","_version":1,"created":true}
では、まず「自転車」で検索してみます。
$ curl -XGET 'http://search-myes-hoge.ap-northeast-1.es.amazonaws.com/kuromoji/data/_search' -d '
{
"query":{"match":{"text":"自転車"}}
}'
すると、以下のようにtextに自転車を含む2つのデータがヒットしました!
{
"took": 8,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 2,
"max_score": 0.32180142,
"hits": [
{
"_index": "kuromoji",
"_type": "data",
"_id": "AVAmDbFReFCp6h-hHJoY",
"_score": 0.32180142,
"_source": {
"title": "渡辺さんの秘密のメモ",
"text": "毎週末自転車乗ってる"
}
},
{
"_index": "kuromoji",
"_type": "data",
"_id": "AVAmEiN8eFCp6h-hHJoa",
"_score": 0.225261,
"_source": {
"title": "佐々木の秘密のメモ",
"text": "自転車持ってるけど乗ってない、コーラよりビール好き"
}
}
]
}
}
次に「大好き」で検索してみます
$ curl -XGET 'http://search-myes-hoge.apast-1.es.amazonaws.com/kuromoji/data/_search' -d '
{
"query":{"match":{"text":"大好き"}}
}'
以下のように2件のデータがヒットしました。このうち「大好き」が含まれたデータは3文字マッチしているので_scoreが高く、「好き」が含まれたデータは2文字しかマッチしていないので_scoreが低いです。ちゃんと日本語を分かち書きで検索できてますね。
{
"took": 3,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 2,
"max_score": 0.26574233,
"hits": [
{
"_index": "kuromoji",
"_type": "data",
"_id": "AVAmDgheeFCp6h-hHJoZ",
"_score": 0.26574233,
"_source": {
"title": "梶さんの秘密のメモ",
"text": "コカコーラ大好き"
}
},
{
"_index": "kuromoji",
"_type": "data",
"_id": "AVAmEiN8eFCp6h-hHJoa",
"_score": 0.13221094,
"_source": {
"title": "佐々木の秘密のメモ",
"text": "自転車持ってるけど乗ってない、コーラよりビール好き"
}
}
]
}
}
ということで、複雑なインストールや設定をしなくても、そのまま日本語全文検索が使えます!
さいごに
まぁ、結局中身がElasticsearchなので当然できて当たり前なのですが、Amazon ESとしてはプラグインの追加機能が提供されていないため、最初からKuromojiが含まれているのは、日本においてはすごく重要です。すぐ日本語のシステムで使えますね!