Elasticsearch with Dockerでkuromoji pluginを使う
意外と出てこなかったのでメモです。
環境
Docker v23.0.5
Docker Compose v2.17.3
Elasticsearch 8.5.0
Kibana 8.5.0
dockerコンテナへpluginのインストール
まずはdocker-composeから。
Elasticのドキュメントはこちら。
version: "3"
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.5.0
container_name: elasticsearch
environment:
discovery.type: single-node
xpack.security.enabled: "false"
ports:
- 9200:9200
- 9300:9300
volumes:
- es_data:/usr/share/elasticsearch/data
tty: true
kibana:
depends_on:
- elasticsearch
image: docker.elastic.co/kibana/kibana:8.5.0
container_name: kibana
environment:
ELASTICSEARCH_HOSTS: http://elasticsearch:9200
ports:
- 5601:5601
volumes:
es_data:
コンテナ内で操作を行うので tty: true を書いておきます。
そして起動したらattachしてコンテナ内に入ります。
コンテナ内で以下のコマンドでpluginをインストールします。
Elasticのドキュメントはこちら。
bin/elasticsearch-plugin install analysis-icu
bin/elasticsearch-plugin install analysis-kuromoji
sudoは不要でした。sudoが無いというエラーになるので、自身でコンテナを作るという記事もあるのかもしれません。
インストールが出来たらコンテナを再起動しておきます。
(Elasticsearchコンテナだけで大丈夫)
動作確認
kuromoji pluginが使える状態か、KibanaのDev Toolsで確認します。
POST _analyze
{
"tokenizer": "kuromoji_tokenizer",
"text": ["今日は晴れです"]
}
使えるようになっていれば以下のような結果が出ます。
インデックスへの適用
ここまでくるとドキュメントを見ながらチューニングしていきます。
以下のような感じになったりします。
"analysis": {
"tokenizer": {
"kuromoji_user_dict": {
"type": "kuromoji_tokenizer",
"mode": "extended"
}
},
"analyzer": {
"kuromoji_normalize": {
"type": "custom",
"char_filter": ["icu_normalizer"],
"tokenizer": "kuromoji_user_dict",
"filter": [
"kuromoji_baseform",
"kuromoji_part_of_speech",
"cjk_width",
"ja_stop",
"kuromoji_stemmer",
"lowercase"
]
}
}
}
既存のインデックスに適用する場合はReindexするなりで適用していくことになるかと思います。