よい機会なので、Elasticsearchのインストールからsudachiを使えるようにする設定変更まで、ざっくり記録しておこうと思います。18.04という前提で話を進めますが、動けばなんでもOKです。7.3.1が最新です。aptにパッケージの取得元と鍵を追加してinstallします。elasticsearch環境変数JAVA_HOMEを設定しておきます。/etc/environmentelasticsearch.ymlに設定を追加します。クラスタ名を何か付ける(例:mastodon-search)ノード名を${HOSTNAME}にする(識別できれば何でもOK)複数のサーバを設置してクラスタを構成することで、負荷を分散したり、レプリカを持たせたりできますが、ここでは1台だけで構成します。_EOS_jvm.optionsにJVMのヒープサイズの設定をします。サーバのメモリの35%50%ぐらいを割り当てるのが目安だそうです。ここでは、2GBのVPSという想定で、既存の設定をコメントアウトして、新たに512MBずつ割り当てます。_EOS_analysis-sudachiを入れる必要なファイルを取ってきて、analysis-sudachiをインストールします。辞書を取ってきて/etc/elasticsearch/に展開。sudachi.jsonを作成して、使用する辞書の指定と、いくつかの補助設定をしておきます。_EOS_ユーザー辞書を追加すると良いのですが、ここでは説明を割愛します。テーマサーバでは、語彙を増やしておきたいですね!起動するsystemctlで起動します。バージョンが変わる時にsudachi等のプラグインを再インストールする必要があるので、aptで勝手に更新されないようにロックしておきます。APIについてはnginxなどリバースプロキシでhttps接続できるようにする方が設定が簡単で安全と思われます。APIはポート9200を使いますが、伏せる意味でもあえて異なるポート(ここでは9100)で受け付け、ファイアウォールで接続元をMastodonサーバに限定します。いうわけで、ここではnginxとcertbot、ufwを使います。インストールからざっと説明しますが、既に入っている場合は設定だけ参考にしてください。ここではDNSにcloudflareを使っているという想定で、certbotのdnsプラグインも追加しておきます。ご自身の環境に合わせて選択してください。Encrypt(certbot)で、TLS-SNI-01の削除により証明書の更新に失敗する問題への対応の中で説明しています)ufwは、ssh(22)と、9100ポートへの接続を許可します。sshに22以外を使っている場合は各自変更してください。他の必要なポートがある場合も忘れずに開放しておきましょう。enableで、Mastodonを実行しているサーバからだけ、elasticsearchの9100ポートに接続を許可します。tcpcertbotはdns-01で認証します。Keyが保存されている想定です。_EOS_/etc/nginx/sites-enabled/elasticsearch.confにシンボリックリンクを張ります。バージョンとか色々でる。https://example.com:9100/_cat/indices?vMastodon側の設定elasticsearchのサーバに繋がるかどうか真っ先にテストしておきましょう。https://example.com:9100/.env.production.env.productionで、elasticsearchを有効にし、サーバとポートを指定し、プリフィックスを指定します。プレフィックスを指定すると、elasticsearchが他のMastodonサーバの検索など他の役割を引き受けている場合にインデックスを区別できます。ES_PREFIX=exampleapp/chewy/statuses_index.rbとapp/services/search_service.rbMastodon本体のコードにも修正が必要です。app/chewy/statuses_index.rbとapp/services/search_service.rbを、sudachiを活用するように修正します。具体的な内容は、githubのコミットを参照してください。cherry-pickするか、差分を見ながら自分で修正してください。e2214ec9844d1e17c219065e1034814077b39119この変更で、sudachiの力によって日本語を適切に扱えるようになります。IDでソートすることで、検索結果の表示を最新順にしています。Mastodon側からdeployする過去の記事をインデックスし、検索できるようにします。tootctlに専用のコマンドがあります。deployを実行します。投稿が多数蓄積されているサーバでは時間がかかるので覚悟した方が良いです。tmux等でssh接続が切れても大丈夫なように対策しておきましょう。設定に不備があったりすると早めにエラー終了するので、内容に応じて対処してください。Mastodonの再起動.env.productionとコードの変更を反映させるため、再起動します。deployの時点で書き間違え等によるエラーはあらかた出尽くしているかと思いますが、ちゃんと動くかどうか色々確かめてください。mastodon-*【オマケ】elasticsearchをアップデートする遠からず、elasticsearchのアップデートに対応する時が来ると思います。その際の手順の参考です。自分でpom.xmlを書き換え、関連する箇所を修正してビルドしても良いが、ここでは割愛するanalysis-sudachiのv7.0.1-1.3.0にアップデートする例を挙げておきます。実際に適用する際は、zipファイルのファイル名nalysis-sudachi-elasticsearch7.0.1-1.3.0.zipとURLhttps://github.com/WorksApplications/elasticsearch-sudachi/releases/download/v7.0.1-1.3.0/analysis-sudachi-elasticsearch7.0.0-1.3.0.zipの記載箇所を入れ替えて実行してください。elasticsearch謝辞・参考資料MastodonでのElasticsearchの設定方法については、なんと言ってもクラゲ丼のぜまさんの記事が先駆けです。私も大変お世話になりました。本記事の設定部分の記述については、ほぼそのままお借りしています。7.xに対応するための互換オプションをnginxでrewriteするという手法は、Balさんが編み出した手法をお借りしています。