Misskey(2025.1.0)の検索エンジンにPGroongaを使う

Misskey 2025.1.0(注: 執筆時点ではベータ版)で検索エンジンにPGroongaが選べるようになりました。
PGroongaはPostgreSQLの高速全文検索を行う拡張機能です。デフォルトの検索よりMisskeyの検索が高速になります。

実施前にバックアップを取ることをお勧めします。

検証環境

  • Ubuntu 24.04
  • Misskey 2025.1.0-beta.1
  • PostgreSQL 16

PGroongaのインストール

Ubuntuにインストール | PGroongaに従ってインストールをします。
私はUbuntu 24.04、PostgreSQL 16の環境を使っているため、次のようにしました。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
sudo apt install -y software-properties-common
sudo add-apt-repository -y universe
sudo add-apt-repository -y ppa:groonga/ppa
sudo apt install -y wget lsb-release
wget https://packages.groonga.org/ubuntu/groonga-apt-source-latest-$(lsb_release --codename --short).deb
sudo apt install -y -V ./groonga-apt-source-latest-$(lsb_release --codename --short).deb
echo "deb http://apt.postgresql.org/pub/repos/apt/ $(lsb_release --codename --short)-pgdg main" | sudo tee /etc/apt/sources.list.d/pgdg.list
wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
sudo apt update
sudo apt install -y -V postgresql-16-pgdg-pgroonga

MisskeyのデフォルトでインストールされるPostgreSQLは15であるため、人によっては postgresql-15-pgdg-pgroonga とする必要があるかもしれません。
psql -V などでバージョンを確認してください。

PGroongaの有効化

次にPostgreSQLにログインし、PGroongaを有効化します。
PostgreSQLの拡張機能は明示的に有効化する必要があるようです。

1
sudo -u postgres psql

ログインをしたら、Misskeyのデータベースを選択します。

1
\c "misskey"

PGroongaを有効化します。

1
CREATE EXTENSION pgroonga;

PGroongaのインデックス作成

PGroonga用のインデックスを作成します。
feat(backend): pgroongaに対応(configの構成変更あり) by samunohito · Pull Request #14978 · misskey-dev/misskeyを真似します。
この処理には時間がかかります。私の環境ではおよそ600万行の投稿に対し、10分程度かかりました。
インデックス処理中は書き込み処理はできないため、ノートの投稿は失敗します。(concurrentlyオプションを使えば書き込みしながら処理できるかもしれませんが、私は未確認です。)

1
CREATE INDEX idx_note_text_with_pgroonga ON note USING pgroonga (text);

Misskeyの設定変更

Misskeyの設定ファイルを編集します。
fulltextSearchをsqlPgroongaに変更します。

1
2
fulltextSearch:
  provider: sqlPgroonga

Misskeyのプロセスを再起動すれば完了です。

おまけ

インデックスを作成しても検索が遅いことがあります。その際はPostgreSQLへログインし、vacuumを行います。
この処理にも時間がかかることがあります。

1
vacuum verbose analyze;

有識者より、Pgroongaはログでディスクをひっ迫するため、ログの出力レベルをWARNにすることをおすすめされました。デフォルトはNOTICEです。
pgroonga.log_levelパラメーター | PGroonga 設定ファイルに記載することで永続化できます。(私は未実施)

アンインストール方法

PostgreSQLからPGroongaをアンインストールします。

1
2
DROP INDEX idx_note_text_with_pgroonga;
DROP EXTENSION pgroonga;

Ubuntuから削除します。

1
sudo apt remove -y postgresql-16-pgdg-pgroonga
comments powered by Disqus
Built with Hugo
テーマ StackJimmy によって設計されています。