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の運用という手間は増えますが、もしよく検索しているのであれば設定をする価値はあると思います。