MastodonとElasticsearchを連携する
概要
Mastodonのバージョン2.3.0から、全文検索などのElasticsearchとの連携ができるようになり、古いトゥートの検索や高速な検索ができるようになりました。
デフォルトでは、Elasticsearchとの連携は切られていますが、設定をすることで使えるようになります。
ここでは、MastodonとElasticsearchの連携方法を紹介します。
環境
- Mastodon 2.3.1
Elasticsearchとは
Elasticsearchは、全文検索エンジンと呼ばれるもので、データを入れておけば、大量のデータの中から高速に目的のデータを見つけ出すことができます。
Mastodonであれば、大量のトゥートのデータをElasticsearchに入れておいて、トゥートなどの検索の時には、そのElasticsearchを使って目的のデータを見つけ出します。
通常のデータベースから探すよりも高速に検索することができるので、SNSなどの検索でも使われており、実績があります。
もちろん、サポートなどは別ですが、無料で使い始めることができます。
ただし、コンピュータのリソースをたくさん使うので、利用する上でコンピュータのリソースが足りるかは考えたほうがいいです。
最低でも、1GBのメモリを持ったサーバ、できれば1.5GB以上のメモリを持ったサーバを用意したほうがいいです。
Elasticsearchのインストール
Elasticsearchのインストール方法は、ここでは触れません。
ただ、Dockerを使ってElasticsearchを使っている場合は、docker-compose.ymlの次の部分のコメントを解除して次のようにすればElasticsearchが起動できます。
es:
restart: always
image: docker.elastic.co/elasticsearch/elasticsearch-oss:6.1.3
environment:
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
networks:
- internal_network
#### Uncomment to enable ES persistance
volumes:
- ./elasticsearch:/usr/share/elasticsearch/data
設定
Elasticsearchを起動したら、Mastodonの方にElasticsearchを使うように設定する必要があります。
設定は、.env.productionでします。
.env.productionの設定でコメントになっている部分のコメントを解除して、次のようにします。
古い.env.productionの場合、この設定がないので、ファイルに次の内容を追加します。
# Optional ElasticSearch configuration
ES_ENABLED=true
ES_HOST=es
ES_PORT=9200
ES_ENABLED
がElasticsearchを使うようにするための設定で、ES_HOST
がElasticsearchのホスト名、ES_PORT
がポート番号です。
Dockerを使っている場合などはこのままでもいいですが、Dockerを使っていなかったり、Dockerを使っていてもElasticsearchを別のサーバなどで起動している場合は、ES_HOST
などを適切に書き換えてください。
設定が終わったら、次に既存のトゥートをElasticsearchに入力します。
Elasticsearhへの入力は、次のコマンドでします。
RAILS_ENV=production bundle exec rails chewy:deploy
Dockerを使っている場合は次のコマンドです。
docker-compose run --rm web rails chewy:deploy
トゥートがたくさんあると、時間がかかります。その場合、気長に待ちましょう。
コマンドの実行が終わったら、MastodonとElasticsearchの連携は終わりです。
さいごに
Mastodonのインスタンスが、小規模な場合はそれほど効果を発揮しないかもしれませんが、中規模以上のインスタンスでは検索のストレスが減るため快適になると思います。
Elasticsearchの運用という手間は増えますが、もしよく検索しているのであれば設定をする価値はあると思います。