ウェブサービスを作っています。

Elasticsearch v7 最新版と elasticsearch-sudachi が入った Docker イメージを作る

大変便利な elasticsearch-sudachi (analysis-sudachi) ですが、 2024/1/28 現在ですと Elasticsearch の v7 最新版 7.17.17 に対応したパッケージが提供されていません。

そこで、analysis-sudachi を自前ビルドする Dockerfile を作りました。

README に書かれている

./gradlew -PengineVersion=es:x.x.x build

ですとビルドに失敗したため、

./gradlew -PengineVersion=es:x.x.x build -x integration:test

のように、integration:test タスクを除いてビルドしています。(なぜこのタスクの除く必要があるのか、わかる方がいたら教えてほしいです)


Dockerfile

# syntax = docker/dockerfile:1

ARG ES_VERSION=7.17.17
ARG SUDACHI_DIC_VERSION=20240109

FROM gradle:8 AS build

# Build analysis-sudachi
ARG ES_VERSION
RUN git clone https://github.com/WorksApplications/elasticsearch-sudachi.git \
    && cd elasticsearch-sudachi \
    && ./gradlew -PengineVersion=es:$ES_VERSION build -x integration:test

FROM elasticsearch:$ES_VERSION

# Install anaylsis-icu plugin
RUN ./bin/elasticsearch-plugin install analysis-icu

# Install analysis-sudachi plugin
ARG ES_VERSION
COPY --from=build /home/gradle/elasticsearch-sudachi/build/distributions/elasticsearch-$ES_VERSION-analysis-sudachi-*.zip /tmp/analysis-sudachi.zip
RUN ./bin/elasticsearch-plugin install file:///tmp/analysis-sudachi.zip \
    && rm /tmp/analysis-sudachi.zip

# Install sudachi dictionaries
ARG SUDACHI_DIC_VERSION
RUN curl -O http://sudachi.s3-website-ap-northeast-1.amazonaws.com/sudachidict/sudachi-dictionary-$SUDACHI_DIC_VERSION-core.zip \
    && curl -O http://sudachi.s3-website-ap-northeast-1.amazonaws.com/sudachidict/sudachi-dictionary-$SUDACHI_DIC_VERSION-full.zip \
    && unzip sudachi-dictionary-$SUDACHI_DIC_VERSION-core.zip \
    && unzip -o sudachi-dictionary-$SUDACHI_DIC_VERSION-full.zip \
    && mkdir ./config/sudachi \
    && mv sudachi-dictionary-$SUDACHI_DIC_VERSION/*.dic ./config/sudachi/ \
    && rm -rf sudachi-dictionary-$SUDACHI_DIC_VERSION*

Dockerfile の書き方については、

が参考になりました。ありがとうございます。

gihyo.jp