- 更新日: 2014年5月30日
- Elasticsearch
elasticsearch-ruby でトークナイザーを指定してトークン分割
スポンサーリンク
elasticsearch-ruby を使っていて文字列をトークンに分割して、ruby の配列で受け取りたい場面がありました。Elasticsearch::API::Indices#analyze という、Elasticsearch の _analyze API をラップしてあるメソッドが使えます。
【お知らせ】 英単語を画像イメージで楽に暗記できる辞書サイトを作りました。英語学習中の方は、ぜひご利用ください!
スポンサーリンク
以下 pry で。
Elasticsearch::API::Indices#analyze を使う
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
pry(main)> es_client = Elasticsearch::Client.new pry(main)> es_client.indices.analyze(text: '東京都目黒区') => {"tokens"=> [{"token"=>"東", "start_offset"=>0, "end_offset"=>1, "type"=>"<IDEOGRAPHIC>", "position"=>1}, {"token"=>"京", "start_offset"=>1, "end_offset"=>2, "type"=>"<IDEOGRAPHIC>", "position"=>2}, {"token"=>"都", "start_offset"=>2, "end_offset"=>3, "type"=>"<IDEOGRAPHIC>", "position"=>3}, {"token"=>"目", "start_offset"=>3, "end_offset"=>4, "type"=>"<IDEOGRAPHIC>", "position"=>4}, {"token"=>"黒", "start_offset"=>4, "end_offset"=>5, "type"=>"<IDEOGRAPHIC>", "position"=>5}, {"token"=>"区", "start_offset"=>5, "end_offset"=>6, "type"=>"<IDEOGRAPHIC>", "position"=>6}]} |
トークナイザーの指定なしだと、上のように1文字ごとに区切ってしまい使えない。
tokenizer オプションを渡せる
引数で tokenizer を指定できます。以下、トークナイザー(tokenizer)に kuromoji_tokenizer を指定した場合です。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
pry(main)> es_client.indices.analyze(text: '東京都目黒区', tokenizer: 'kuromoji_tokenizer') => {"tokens"=> [{"token"=>"東京", "start_offset"=>0, "end_offset"=>2, "type"=>"word", "position"=>1}, {"token"=>"都", "start_offset"=>2, "end_offset"=>3, "type"=>"word", "position"=>2}, {"token"=>"目黒", "start_offset"=>3, "end_offset"=>5, "type"=>"word", "position"=>3}, {"token"=>"区", "start_offset"=>5, "end_offset"=>6, "type"=>"word", "position"=>4}]} |
これでOK。良い感じにトークン分割してくれました。実際は以下のようなコードにして使いました。
1 2 3 4 |
pry(main)> es_client.indices.analyze(text: '東京都目黒区', tokenizer: 'kuromoji_tokenizer')["tokens"].map{|i| i["token"]} => ["東京", "都", "目黒", "区"] |
完璧です。
- – 参考リンク –
- Module: Elasticsearch::API::Indices::Actions — Documentation for elasticsearch-api (1.0.2)
- Rails Elasticsearchを日本語対応させる – Qiita
スポンサーリンク
全文検索システムを実装するには、ElasticSearch がおすすめです。
- Elasticsearch の関連記事
- CentOS6にElasticsearchをインストールしMySQLからデータをインポート
- Rails で jQuery を使って Elasticsearch 全文検索による検索文字をハイライトさせる
- elasticsearch-ruby で外部入力から検索時の json 用文字列のエスケープ処理
- Elasticsearch を Ruby から使う
- ElasticsearchにMySQLからデータ挿入、JDBC River Pluginのインストールと使い方
- Elasticsearchのクエリとフィルターで簡単な検索を試す例
- ElasticsearchのインストールとCSVからのデータ挿入
Leave Your Message!