RoboCup Junior Japan Rescue Kanto OB
2005~2013
2005~2013
前回に引き続き、第5回の記事です。
今回はタイトルの通り、MisskeyにMeilisearchという検索エンジンを導入する話です。
Misskeyのインスタンスを建てた話。①(Misskey紹介編)
Misskeyのインスタンスを建てた話。②(GCPでの建ち上げ編)
Misskeyのインスタンスを建てた話。③(OCIでの建ち上げ編)
Misskeyのインスタンスを建てた話。④(Webhookで対話bot作成編)
Misskeyにはノート用の検索システムが標準で搭載されているのですが、
Misskeyの標準のノート検索は時間がかかる上に、サーバーに多大な負荷を与えてしまうことから、
デフォルトでロールによりノート検索は無効になっています。
なので、従来の中規模以上のインスタンスではノート検索の有効化は非常に覚悟のいる行為でした。
しかし13.12.0バージョンからMisskeyでは、
Meilisearchという外部の検索エンジンを利用することができるようになりました。
Meilisearchは逐次検索やタイプミス耐性、ファセット検索、ジオサーチ、マルチテナンシーなどが利用でき、
何より最近注目のRustで作成されており、動作が超高速ということでリリース早々にして有名になりました。
この手のやつは日本語があやふやなことが多いのですが、ちゃんと日本語の形態素解析(Lindera)に対応しています。
今回はMisskeyにMeilisearchを導入する手法について解説していこうと思います。
こちらのサイトを参考にしたのですが、この内容が投稿されたしばらく後、バージョン13.12.2において
仕様が変更されてしまっているので一部内容を書き換えたものを掲載します。
※MisskeyのMeilisearchはSQLからjsonファイルを書き出した後、その内容を受け取って全文探索をします。
そのため、ディスクIOを非常に多く行うので、オンプレミスでMisskeyを建てている場合はその点にご留意ください。
特にSSDを利用している場合は注意が必要ですね。モニタリングしてないとディスクがヤバスです。
まずはインストール。Meilisearchはサーバを建ててHTTPのリクエストを飛ばして利用する感じです。
つまり、Misskey本体サーバとサーバを分けて運用することが可能となっております。
ウチもそのうち分けようと思っていますが、リソースに余裕があるのでひとまず同一サーバで建ててみます。
下記のコマンドを順に実行します。
次に./meilisearch.tomlファイルを編集します。下記の項目を編集します。
master_keyは任意に設定する値です。MisskeyからAPI送信時のキーになるものです。
db_path、dump_dir、snapshot_dir をMeilisearchインストール時に作成されたフォルダ配下に設定します。
no_analyticsですが、Meilisearchはデフォルトでテレメトリデータを開発元に送信する機能があります。
テレメトリデータから個人や検索内容の特定等はできないようですが、
テレメトリデータが個人情報に当たるケース(カリフォルニア州消費者プライバシー法など)があるらしいので
各インスタンスの規約や、通信量的に好ましくない場合は、no_analyticsをtrueにすると、送信しなくなります。
次に、この編集データの反映作業です。tomlファイルの移動やディレクトリ作成ですね。
次に下記の /etc/systemd/system/meilisearch.service ファイルを作成してsystemlctlから利用できるようにします。
終わったら下記コマンドでMeilisearchを有効にします。
次に、Misskeyの過去のノートをMeilisearchから検索できるようにindexを貼ります。
この作業を行わないと、Meilisearch導入以前のノートが検索できなくなってしまいます。
DB名、LIMIT後の数値、INDEX名、MASTER_KEYの編集が必要です。
DB名はMisskeyのpostgresのDB名(デフォルトはmk1)に置換してください。
LIMITの数値は適当に200000にしていますが、現在の総ノート数を確認して記述する等にしてください。
INDEX名に利用するインデックスの名前を記述します。ここは一般に「インスタンスホスト名---note」になります。
バージョン13.12.2以降、MisskeyではMeilisearchの利用にindexが必要になりました。
後述するdefault.ymlで設定したindexの値に---noteがpostfixされた値がindexとなるので、
現在のmisskeyでは、ここでのinde貼りはこの形式に合わせる必要があります。
MASTER_KEYは先ほどご自身で設定されたmaster_keyになります。
最後にMisskey側でMeilisearchを使えるように、misskey/.config/default.yml の設定を行います。
MASTER_KEYとインスタンスホスト名は上のコマンドと同じです。
ここまで設定が完了したらsystemcltでMisskeyの再起動と、Meilisearchの起動を行います。
といっても、総ノート数が4桁~5桁前半ぐらいのインスタンスではあまり変化が見られないと思うので、
おひとり様インスタンスでは実感がないかもですね。個人的にはお一人様インスタンスでは不要だと思ってます。
再びになりますが、注意点として
・日本語も対応してるが、形態素解析結果によっては正しい検索結果を返さないことがある。
・Misskeyのノート検索はロールによってデフォルトで無効にされている。
今回はタイトルの通り、MisskeyにMeilisearchという検索エンジンを導入する話です。
Misskeyのインスタンスを建てた話。①(Misskey紹介編)
Misskeyのインスタンスを建てた話。②(GCPでの建ち上げ編)
Misskeyのインスタンスを建てた話。③(OCIでの建ち上げ編)
Misskeyのインスタンスを建てた話。④(Webhookで対話bot作成編)
Misskeyにはノート用の検索システムが標準で搭載されているのですが、
Misskeyの標準のノート検索は時間がかかる上に、サーバーに多大な負荷を与えてしまうことから、
デフォルトでロールによりノート検索は無効になっています。
なので、従来の中規模以上のインスタンスではノート検索の有効化は非常に覚悟のいる行為でした。
しかし13.12.0バージョンからMisskeyでは、
Meilisearchという外部の検索エンジンを利用することができるようになりました。
Meilisearchは逐次検索やタイプミス耐性、ファセット検索、ジオサーチ、マルチテナンシーなどが利用でき、
何より最近注目のRustで作成されており、動作が超高速ということでリリース早々にして有名になりました。
この手のやつは日本語があやふやなことが多いのですが、ちゃんと日本語の形態素解析(Lindera)に対応しています。
今回はMisskeyにMeilisearchを導入する手法について解説していこうと思います。
こちらのサイトを参考にしたのですが、この内容が投稿されたしばらく後、バージョン13.12.2において
仕様が変更されてしまっているので一部内容を書き換えたものを掲載します。
※MisskeyのMeilisearchはSQLからjsonファイルを書き出した後、その内容を受け取って全文探索をします。
そのため、ディスクIOを非常に多く行うので、オンプレミスでMisskeyを建てている場合はその点にご留意ください。
特にSSDを利用している場合は注意が必要ですね。モニタリングしてないとディスクがヤバスです。
まずはインストール。Meilisearchはサーバを建ててHTTPのリクエストを飛ばして利用する感じです。
つまり、Misskey本体サーバとサーバを分けて運用することが可能となっております。
ウチもそのうち分けようと思っていますが、リソースに余裕があるのでひとまず同一サーバで建ててみます。
下記のコマンドを順に実行します。
sudo apt install curl -y curl -L https://install.meilisearch.com | sh chmod +x meilisearch sudo mv ./meilisearch /usr/local/bin/ sudo useradd -d /var/lib/meilisearch -b /bin/false -m -r meilisearch curl https://raw.githubusercontent.com/meilisearch/meilisearch/latest/config.toml > ./meilisearch.tomlこれでインストールが完了します。
次に./meilisearch.tomlファイルを編集します。下記の項目を編集します。
env = "production" master_key ="16byte以上の任意の値" db_path = "/var/lib/meilisearch/data" dump_dir = "/var/lib/meilisearch/dumps" snapshot_dir = "/var/lib/meilisearch/snapshots" no_analytics = trueenvをproductionにします。
master_keyは任意に設定する値です。MisskeyからAPI送信時のキーになるものです。
db_path、dump_dir、snapshot_dir をMeilisearchインストール時に作成されたフォルダ配下に設定します。
no_analyticsですが、Meilisearchはデフォルトでテレメトリデータを開発元に送信する機能があります。
テレメトリデータから個人や検索内容の特定等はできないようですが、
テレメトリデータが個人情報に当たるケース(カリフォルニア州消費者プライバシー法など)があるらしいので
各インスタンスの規約や、通信量的に好ましくない場合は、no_analyticsをtrueにすると、送信しなくなります。
次に、この編集データの反映作業です。tomlファイルの移動やディレクトリ作成ですね。
sudo cp ./meilisearch.toml /etc/meilisearch.toml sudo mkdir /var/lib/meilisearch/data /var/lib/meilisearch/dumps /var/lib/meilisearch/snapshots sudo chown -R meilisearch:meilisearch /var/lib/meilisearch sudo chmod 750 /var/lib/meilisearch難しいことは特にしていないので流しで。
次に下記の /etc/systemd/system/meilisearch.service ファイルを作成してsystemlctlから利用できるようにします。
[Unit] Description=Meilisearch After=systemd-user-sessions.service [Service] Type=simple WorkingDirectory=/var/lib/meilisearch ExecStart=/usr/local/bin/meilisearch --config-file-path /etc/meilisearch.toml User=meilisearch Group=meilisearch [Install] WantedBy=multi-user.target
終わったら下記コマンドでMeilisearchを有効にします。
sudo systemctl daemon-reload sudo systemctl enable --now meilisearch
次に、Misskeyの過去のノートをMeilisearchから検索できるようにindexを貼ります。
この作業を行わないと、Meilisearch導入以前のノートが検索できなくなってしまいます。
cd /var/tmp/ sudo -u postgres psql -d DB名 -c "SELECT json_agg(row_to_json(t)) ::text FROM (SELECT id, \"createdAt\", \"userId\", \"userHost\", \"channelId\",cw,text FROM note WHERE visibility IN ('home', 'public')LIMIT 200000) t" > /var/tmp/notes_tmp sed -i '1d;2d;x;$d;' notes_tmp jq 'map(.createdAt |= (strptime("%Y-%m-%dT%H:%M:%S%Z") | mktime | . * 1000 + (. / 1000000 | floor)))' notes_tmp > notes.json curl -X POST 'http://localhost:7700/indexes/INDEX名/documents?primaryKey=id' --data-binary @notes.json -H 'Content-Type: application/json' -H "Authorization: Bearer MASTER_KEY"
DB名、LIMIT後の数値、INDEX名、MASTER_KEYの編集が必要です。
DB名はMisskeyのpostgresのDB名(デフォルトはmk1)に置換してください。
LIMITの数値は適当に200000にしていますが、現在の総ノート数を確認して記述する等にしてください。
INDEX名に利用するインデックスの名前を記述します。ここは一般に「インスタンスホスト名---note」になります。
バージョン13.12.2以降、MisskeyではMeilisearchの利用にindexが必要になりました。
後述するdefault.ymlで設定したindexの値に---noteがpostfixされた値がindexとなるので、
現在のmisskeyでは、ここでのinde貼りはこの形式に合わせる必要があります。
MASTER_KEYは先ほどご自身で設定されたmaster_keyになります。
最後にMisskey側でMeilisearchを使えるように、misskey/.config/default.yml の設定を行います。
meilisearch: host: localhost port: 7700 apiKey: 'MASTER_KEY' index: 'インスタンスホスト名'サーバーを分けるときはhostを別のマシンのものに変更しましょう。
MASTER_KEYとインスタンスホスト名は上のコマンドと同じです。
ここまで設定が完了したらsystemcltでMisskeyの再起動と、Meilisearchの起動を行います。
sudo systemctl start meilisearch sudo systemctl restart misskirara.net多分これで検索にMeilisearchが使えるようになっていると思います。
といっても、総ノート数が4桁~5桁前半ぐらいのインスタンスではあまり変化が見られないと思うので、
おひとり様インスタンスでは実感がないかもですね。個人的にはお一人様インスタンスでは不要だと思ってます。
再びになりますが、注意点として
・日本語も対応してるが、形態素解析結果によっては正しい検索結果を返さないことがある。
・Misskeyのノート検索はロールによってデフォルトで無効にされている。
・オンプレの場合はディスクIOに気を付ける。
・indexが必須になるアップデートがあったので、旧来の方法では動かない。
13.12.2 以前からMeilisearchを利用している場合は、
こちらの手順を使ってindexを張り替えることで、古いノートも検索ができるようになります。
以上がMisskeyのノート検索でMeilisearchを利用する手順となります。
Misskeyは開発思想が先進的であるが故に、割と古い機能がすぐ廃止になったり変更になったりと、
モデレーションする側としてはなかなかに胃の痛いシステムです。
開発開始から10年以上建っているのに未だに安定しないのもちょっと困りものですね・・・
という訳で今回はここまでです。また何か書くべきことがあれば更新しようと思います~
(^・ω・)ノ RadiumProduction at curonet
・indexが必須になるアップデートがあったので、旧来の方法では動かない。
13.12.2 以前からMeilisearchを利用している場合は、
こちらの手順を使ってindexを張り替えることで、古いノートも検索ができるようになります。
以上がMisskeyのノート検索でMeilisearchを利用する手順となります。
Misskeyは開発思想が先進的であるが故に、割と古い機能がすぐ廃止になったり変更になったりと、
モデレーションする側としてはなかなかに胃の痛いシステムです。
開発開始から10年以上建っているのに未だに安定しないのもちょっと困りものですね・・・
という訳で今回はここまでです。また何か書くべきことがあれば更新しようと思います~
(^・ω・)ノ RadiumProduction at curonet
カレンダー
最新CM
カテゴリー
らじぷろ目次
らじぷろ検索機
最新記事
(01/01)
(01/03)
(08/27)
(04/29)
(01/01)
(11/20)
(09/06)
(09/04)
(08/09)
(08/06)
(07/27)
(05/29)
(03/15)
(01/01)
(05/07)
プロフィール
HN:
Luz
性別:
男性
アーカイブ