MastodonにElasticsearch+kuromojiを導入する

おひとり様MastodonサーバーにElasticsearch+kuromojiを導入したので、備忘録として残しておきます。

<注意>
この記事ではすでにMastodonサーバーが立っている前提で書いています。
立つまでの記録は下記記事に書いてありますので、そちらもどうぞ!

目次

なんでElasticsearch+kuromojiなの?

A. Elasticsearchをインストール時にバージョン管理をしてなかったから

kuromojiは公式プラグインなだけあって、Elasticsearchの最新版を入れてもたいてい動くのですが、sudachiだとそうはいきません。2023年5月16日現在、Elasticsearchは7.17.10と8.7.1がリリースされていますが、sudachiは7.17.9と8.6.2までしか対応していません。

つまり、Elasticsearchインストール時にバージョン指定をしていないと、sudachiが対応していないバージョンをインストールしてしまう可能性があるのです。(実際に私がそれをやらかした)

インストールメモ

大まかな流れ

  1. Mastodonの公式ドキュメントを見ながら、JavaとElasticsearchをインストール
  2. kuromojiのダウンロード・インストール
  3. 検索結果の表示設定をいじる

大まかにはこんな感じ。Mastodonの公式ドキュメントではバージョン7のダウンロード・インストールが推奨されているので、素直にバージョン7を導入しました。sudachiの場合は2の部分で辞書のダウンロード・3の設定がより複雑になります。

ここから先は私がつまづいたポイントを備忘録として残します。

Elasticsearchのバージョン指定インストール

apt installの時にバージョンを指定すればOK。

ついでにバージョンを固定しておくと、アップデートのせいでkuromojiもしくはsudachiが動かなくなったということが無くなるので、やっておくと吉。

$ sudo apt install elasticsearch=7.17.9
$ sudo apt-mark hold elasticsearch

.env.productionの場所

/home/mastodon/liveの中にあります。WinSCPやVimで編集すればOK。

kuromojiのダウンロード・インストール

$ apt install unzip
$ wget https://artifacts.elastic.co/downloads/elasticsearch-plugins/analysis-kuromoji/analysis-kuromoji-7.17.10.zip
$ /usr/share/elasticsearch/bin/elasticsearch-plugin install file:///root/analysis-kuromoji-7.17.10.zip

事前にunzipのインストールを忘れずに行うこと

上記のコマンドで7.17.10用kuromojiプラグインがダウンロード・インストールできます。他のバージョンを導入する場合、下記のサイトからダウンロードURLを取得します。

https://www.elastic.co/guide/en/elasticsearch/plugins/index.html

「Elasticsearchのバージョン>Analysis Plugins>Japanese(kuromoji) Analysis Plugin」の順で移動し、「Installation」の中にあるzipURLをコピーして、上記のコマンドにコピペすればOK。インストールコマンドのzipファイル名を、該当バージョンに変更することを忘れずに。

検索設定をいじる

検索結果のソートを変更する

2024/01/01
Mastodon 4.2アップデートのおかげで、ソートの設定を変更をしなくても大丈夫になりました

/home/mastodon/live/app/services/search_service.rbを開いて編集します。

def perform_statuses_search!
-    definition = parsed_query.apply(StatusesIndex.filter(term: { searchable_by: @account.id }))
+    definition = parsed_query.apply(StatusesIndex.filter(term: { searchable_by: @account.id }))order(id: :desc)

order(id: :desc)を追加することで、新しい投稿順でソートできるようになります。

該当トゥートの最大表示件数を変更する

/home/mastodon/live/app/controllers/api/v2/search_controller.rbを開いて編集します。

-  RESULTS_LIMIT = 20
+  RESULTS_LIMIT = 50

最大表示件数を20から50に変更しました。このあたりの数字はお好みで。

参考サイト

sudachiの投稿だけど気にしない。というかやってることはほぼsudachiと同じだしね……。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次