Kuromojiは日本語の形態素解析ライブラリ。これ無しだと、日本語が分かち書きされない状態でインデックス化されてしまうので、日本語の単語で全文しようとしてもうまくヒットしないのだろうと想像する。
Kuromojiに関しては以下の説明が明るい。
Elasticsearchを日本語で使う設定のまとめ – Qiita
http://qiita.com/shin_hayata/items/41c07923dbf58f13eec4
Kuromojiのインストール
kuromoji – japanese morphological analyzer
http://www.atilika.org/
Japanese (kuromoji) Analysis Plugin | Elasticsearch Plugins and Integrations [5.5] | Elastic
https://www.elastic.co/guide/en/elasticsearch/plugins/current/analysis-kuromoji.html
ElasticSearch同梱のユーティリティを使ってインストールする。
1 2 3 |
$ cd /usr/share/elasticsearch $ sudo bin/elasticsearch-plugin install analysis-kuromoji $ sudo bin/elasticsearch-plugin install analysis-icu |
Kuromojを設定する
公式サイトを眺めてみたんだけど、はっきりと「設定はコレ」みたいな記事がない。
以下の記事がちょっと古いんだけど設定ファイルの記述があったのでなぞってみる。
Elasticsearch に kuromoji を入れて日本語全文検索をする – Qiita
http://qiita.com/mserizawa/items/8335d39cacb87f12b678
1 2 3 |
$ vi config/elasticsearch.yml index.analysis.analyzer.default.type: custom index.analysis.analyzer.default.tokenizer: kuromoji_tokenizer |
設定ファイル編集してElasticSeachを再起動したらログにエラーが出た。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
************************************************************************************* Found index level settings on node level configuration. Since elasticsearch 5.x index level settings can NOT be set on the nodes configuration like the elasticsearch.yaml, in system properties or command line arguments.In order to upgrade all indices the settings must be updated via the /${index}/_settings API. Unless all settings are dynamic all indices must be closed in order to apply the upgradeIndices created in the future should use index templates to set default values. Please ensure all required values are updated on all indices by executing: curl -XPUT 'http://localhost:9200/_all/_settings?preserve_existing=true' -d '{ "index.analysis.analyzer.default.tokenizer" : "kuromoji_tokenizer", "index.analysis.analyzer.default.type" : "custom" }' ************************************************************************************* |
API経由でインデックスごとに設定しろということらしい。
インデックスの変更前にはインデックスを一旦クローズする必要がある。そして設定を変更してから、インデックスを再度オープンすることで、新しい設定でインデックスが使えるようになる。これ少しハマったので以下記事を覚書リンク。
elasticsearch – error when trying to update the settings – Stack Overflow
https://stackoverflow.com/questions/19758335/error-when-trying-to-update-the-settings
1 2 3 4 5 6 |
$ curl -XPOST 'localhost:9200/scout/_close' $ curl -XPUT 'http://localhost:9200/scout/_settings?preserve_existing=true' -d '{ "index.analysis.analyzer.default.tokenizer" : "kuromoji_tokenizer", "index.analysis.analyzer.default.type" : "custom" }' $ curl -XPOST 'localhost:9200/scout/_open' |
これで設定が変わったので、古い設定のまま作成されているインデックスをいったん削除する。
1 |
$ curl -X DELETE http://localhost:9200/scout |
再び記事をElasticSearchに流し込む。
1 |
$ php artisan scout:import "App\Article" |
インデックスのサイズを比べてみる。Kuromoji追加前のインデックスは記事12件で183KB。
1 2 3 |
$ curl -X GET http://localhost:9200/_cat/indices?v health status index uuid pri rep docs.count docs.deleted store.size pri.store.size yellow open scout PN7wNd5iRga8pqmc9nj0VA 5 1 12 0 183kb 183kb |
Kuromoji追加後のインデックスは記事12件で292.9KB。
1 2 3 |
$ curl -X GET http://localhost:9200/_cat/indices?v health status index uuid pri rep docs.count docs.deleted store.size pri.store.size yellow open scout PN7wNd5iRga8pqmc9nj0VA 5 1 12 0 292.9kb 292.9kb |
形態素解析により日本語が分かち書きされてインデックスされた結果だろう。
日本語の単語で検索したら今度はちゃんとヒットした。良さげ。