見出し画像

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": ["今日は晴れです"]
}

使えるようになっていれば以下のような結果が出ます。

_analyzeの結果

インデックスへの適用

ここまでくるとドキュメントを見ながらチューニングしていきます。
以下のような感じになったりします。

"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するなりで適用していくことになるかと思います。


いいなと思ったら応援しよう!