なーのブログ

nan1sa の個人ブログ

Mastodon に Elasticsearch を導入した

2023-09-20 雑記

Mastodon v4.2 の検索機能の強化に合わせて、mstdn.nan1.casa (通称:なーさーばー) に Elasticsearch を再導入しました。

経緯

Elasticsearch の導入は二度目です。Mastodon サーバーを立てた当時の記事に書いてある通り、サーバーを立てた当初に一度は導入しました。ただ、Vultr から ConoHa に移行するタイミングで以下の理由から Elasticsearch を動かすのをやめました。

  • オペレーターが使えないのが他サービスに比べて劣っていた
  • 検索範囲も狭かったので使い勝手が悪かった
  • 並び順が時系列じゃなかったので単純に不便だった
  • 外部サービスの notestock で検索周りは不便していなかった

Twitter などの他サービスは lang:jafrom:nan1sa などの検索用のオペレーターがあります。投稿言語や投稿ユーザー、投稿日などを条件に追加して検索結果の投稿を絞り込むことができる機能です。Mastodon ではこの機能が使えませんでした。

なーさーばーはおひとりさまのサーバーなので登録しているユーザーは当然なーしか居ないのですが、自分しか登録していないということは自分の投稿しか検索結果に表示されません。これは某構文ではなく、Misskey などの他実装では連合先の投稿も含めて検索できるが Mastodon ではそれができなかった、という意味です。

しかし、近いうちにリリースされる Mastodon v4.2 から検索機能が大幅に強化されることになりました。そう、この記事でも言及している上級者向け UI に対する大幅な改善があった Mastodon v4.2 です。なーさーばーでは先行してベータ版から v4.2 を導入しているのですが、そのベータ版で前述した問題が解決しました。

オペレーターが使えるようになったのだけでも魅力的ですが、他のサーバーのユーザーの投稿を検索できるようになったのが特筆するべき変更点です。Mastodon v4.2 以降および Fedibird では「自分の公開投稿を検索表示していいか否か」を指定するオプションが追加されました。つまり、オプトインで検索を許可した場合には他のユーザーの投稿を検索することができます。

現在は Mastodon v4.2 を導入しているサーバーはごく僅かなので検索もほぼ表示されませんが、正式リリースされれば検索もより便利になりそうで楽しみです。そして、オプトイン式にして検索されたくないユーザーも尊重しているのが好印象です。

導入方法

導入方法自体は公式のドキュメントに全て書いてあるので加えて書くことはありませんが、暇なので記録として書きます。

必要なパッケージの導入

Java と Elasticsearch が必要なので入れます。

apt install openjdk-17-jre-headless

wget -O /usr/share/keyrings/elasticsearch.asc https://artifacts.elastic.co/GPG-KEY-elasticsearch
echo "deb [signed-by=/usr/share/keyrings/elasticsearch.asc] https://artifacts.elastic.co/packages/7.x/apt stable main" > /etc/apt/sources.list.d/elastic-7.x.list

apt update
apt install elasticsearch

Elasticsearch を起動

起動します。

systemctl daemon-reload
systemctl enable --now elasticsearch

Mastodon 側に設定を追加

~/live/.env.production に以下の設定項目を追加します。

ES_ENABLED=true
ES_HOST=localhost
ES_PORT=9200
ES_PRESET= # single_node_cluster, small_cluster or large_cluster
ES_USER=
ES_PASS=

追加後、Mastodon を再起動してからインデックスを作成します。

systemctl restart mastodon-sidekiq
systemctl reload mastodon-web

su - mastodon
cd live
RAILS_ENV=production bin/tootctl search deploy

今回しなかったこと

日本語への最適化

Sudachi や Kuromoji などを導入して日本語の検索に最適化しているサーバーは数多くありますが、ソースコードに手を入れることによってメンテナンスが面倒になるので今回はしないことにしました。というか、解析器くらいソースコードをいじらなくても変更できるようにしてほしい。

まとめ

検索はたぶん今後も notestock をメインで使う気がします(おひささんありがとうございます)が、自分のサーバーでも実用的な検索が使えるようになったのは嬉しいです。おしまい。