Misskeyの過去投稿をMilisearchに登録するツールaminomeを作った

Misskeyの過去投稿をMeilisearchへ登録するツールを作った話

MisskeyはMeilisearchという全文検索エンジンに対応しています。
Meilisearchを導入することで、Misskeyの検索が高速になり、AND検索も使えるようになります。
ただし、Misskey(この記事を書いている時点)には、導入前の過去投稿をMeilisearchに登録する機能がありません。

[13.12.0 beta.5]Meilisearchで導入以前の過去のノートを検索できるようにマイグレーションしたい · Issue #10789 · misskey-dev/misskey

そのため、過去投稿の登録を手動で行う必要があります。
今回は登録を手助けするツールaminomeを作ったので紹介します。

対象環境

  • Misskey 2023.10.x以降
    • aidで動作確認済み。(aidxもおそらく動くはず)
  • Postgresql 15.x
  • meilisearch 1.4.x
  • Ubuntu 22.04

aminomeを使う

Misskeyの投稿をMeilisearchへ登録(インデックス)するツールaminomeを作りました。
Python3が必要です。

dev-hato/aminome: Add all misskey notes to Meilisearch

使い方はREADMEに書いてある通りです。

まずはpip3で必要なパッケージをインストールします。

1
pip3 install -r requirements.txt

次に、aminome.pyを開いてPostgresqlの認証情報を入力します。
(将来的にはMisskeyのconfigファイルを指定したらよしなに実行できるようにしたい。)

1
2
3
4
5
6
7
8
9
# postgresql config
db = psycopg2.connect(
    host='localhost',
    user='misskey-user',
    password='password',
    database='misskey',
    port=5432,
    cursor_factory=psycopg2.extras.DictCursor
)

続いてMeilisearchの認証情報を入力します。
api_keyはMeilisearchのAPIキーを記載します。(マスターキーでも動きます) localhostの部分はMeilisearchを動かしているサーバーのアドレスに直してください。
indexはデフォルトだと、ドットをハイフンに置換したドメイン名です。(Misskeyサーバーのドメインがexample.comならばexample-comになります。)

1
2
3
4
5
6
7
8
# meilisearch config
api_key = "APIKEY"
index = ""
url = f"http://localhost:7700/indexes/{index}---notes/documents?primaryKey=id"
headers = {
    "Content-Type": "application/json",
    "Authorization": f"Bearer {api_key}"
}

最後に python3 ./aminome.py で実行すれば、過去投稿をMeilisearchへ登録できます。

よくある質問

  • Q. ローカル投稿だけでなく連合の投稿も登録したい。

  • A. urlの指定を削除すれば全投稿をMeilisearchに登録できます。

  • Q. Attribute createdAt is not sortable. がログに出て検索が動かない。

  • A. 原因は不明ですがsortableの指定が必要なようです。インスタンスによっては検索できないことがあるをご確認ください。

類似ツール

他にも過去投稿を登録するツールを公開されている方がいるので紹介します。
aminomeより作りは良いです。

Meilisearch導入の利点と欠点

本題からずれますが、Meilisearch導入の利点と欠点をざっくり書いておきます。

私は概ね満足していますが、検索精度の微妙さとMeilsearchがストレージをモリモリ使うので、人を選ぶと思います。
中小規模サーバーならば、(Misskeyの改造が必要ですが)PGroonga対応した方が幸せになれそうな気もします。

あとがき

ツールを作った当初は、あまり需要がないのかなと思って放置していましたが、タイムラインを眺めていると意外と困っている方がいたので記事にすることにしました。
困ってる人の助けになれば嬉しく思います。
configがファイルに分かれてなかったり、細かい設定ができなかったり、pythonだったりいけてない点はありますごめんなさい。

欲を言えばMisskey本体に登録機能が実装されたら嬉しいですね。私はNode.jsを書けないためPRを出さずにツールを書いてしまいましたが。

comments powered by Disqus
Built with Hugo
テーマ StackJimmy によって設計されています。