Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support for meilisearch as backend search solution #9323

Closed
zirconline opened this issue Dec 13, 2022 · 62 comments
Closed

Support for meilisearch as backend search solution #9323

zirconline opened this issue Dec 13, 2022 · 62 comments
Assignees
Labels
✨Feature This adds/improves/enhances a feature packages/backend Server side specific issue/PR

Comments

@zirconline
Copy link

Summary

Obviously, for small and medium-sized misskey instances, elasticsearch takes up too much hardware resources (especially memory) .But meilisearch, which is much lighter. Therefore, it would be very pleasant to add support for meilisearch.

Refrence

https://github.com/meilisearch/meilisearch

@zirconline zirconline added the ✨Feature This adds/improves/enhances a feature label Dec 13, 2022
@tamaina
Copy link
Contributor

tamaina commented May 1, 2023

よさそう

@syuilo
Copy link
Member

syuilo commented May 2, 2023

やるか

@syuilo syuilo self-assigned this May 2, 2023
@syuilo syuilo added the packages/backend Server side specific issue/PR label May 2, 2023
@syuilo
Copy link
Member

syuilo commented May 2, 2023

クエリはJSONじゃなくて文字列で書かないといけなくてめんどい
image

@syuilo
Copy link
Member

syuilo commented May 2, 2023

クエリはJSONじゃなくて文字列で書かないといけなくてめんどい image

tasukete

@syuilo
Copy link
Member

syuilo commented May 2, 2023

作った
image

@syuilo
Copy link
Member

syuilo commented May 2, 2023

👍🏻
image

@syuilo
Copy link
Member

syuilo commented May 3, 2023

image
tasukete

@syuilo
Copy link
Member

syuilo commented May 3, 2023

ブラウザからlocalhost:7700にアクセスしたら見れるのに何故かnodeからは繋がらない

@syuilo
Copy link
Member

syuilo commented May 3, 2023

詰んだ

@u1-liquid
Copy link
Sponsor Contributor

もしかして: DNS問題(cacheable-lookup使ってる?)

@syuilo
Copy link
Member

syuilo commented May 3, 2023

多分使ってない

@syuilo
Copy link
Member

syuilo commented May 3, 2023

image

@syuilo
Copy link
Member

syuilo commented May 3, 2023

あーlocalhostじゃなくて127.0.0.1にしたらいけたかも

@syuilo
Copy link
Member

syuilo commented May 3, 2023

なんか検索結果が0件になる

@syuilo
Copy link
Member

syuilo commented May 3, 2023

tasukete

@syuilo
Copy link
Member

syuilo commented May 3, 2023

@syuilo
Copy link
Member

syuilo commented May 3, 2023

addDocumentsして成功してるのにここが0なのおかしくない?
image

@syuilo
Copy link
Member

syuilo commented May 3, 2023

[2023-05-03T02:47:06Z INFO  actix_web::middleware::logger] 127.0.0.1 "POST /indexes/notes/documents HTTP/1.1" 202 133 "-" "undici" 0.004114
[2023-05-03T02:47:06Z INFO  index_scheduler] A batch of tasks was successfully completed.

@syuilo
Copy link
Member

syuilo commented May 3, 2023

クエリ空にしても0 hitsなんだけど

@syuilo
Copy link
Member

syuilo commented May 3, 2023

ヌァァァァァァァァァァァァァァァァァァァァァァァァァァァァァァァァァァンンンンオオオオンンオンオンオンオンンンンンンンンン゛ン゛!!!!!!!!!!!!!!!!

@u1-liquid
Copy link
Sponsor Contributor

使ってるバージョンがもしかしてv1.1.0?なんか変なバグ見つかって妙なことしてるみたい

v1.1.1使うかv1.0.2使ったほうがいいかも
あとアプデ周りめんどくさい仕様みたいだからlatest使うのはやめた方がいいみたい

@syuilo
Copy link
Member

syuilo commented May 3, 2023

1.1.1だった

@syuilo
Copy link
Member

syuilo commented May 3, 2023

このブランチで他の人が動くか試してもらいたい
https://github.com/misskey-dev/misskey/tree/meilisearch

@syuilo
Copy link
Member

syuilo commented May 3, 2023

コマンド的にはsocumentsにaddしてるけど結果的にはindexだけ作られてるような挙動になってる

@syuilo
Copy link
Member

syuilo commented May 3, 2023

ここでaddDocumentsしてる

this.meilisearchNoteIndex!.addDocuments([{

@syuilo
Copy link
Member

syuilo commented May 3, 2023

スケールに関しては、Misskeyで検索する頻度はそう多くないと思うから問題になりにくそう

@syuilo
Copy link
Member

syuilo commented May 3, 2023

あと、大規模サーバーの場合はオンプレミスよりは(スケーラブルな)Meilisearch Cloud使った方が良いかも

@u1-liquid
Copy link
Sponsor Contributor

u1-liquid commented May 3, 2023

とはいえ…同意するからElasticsearch使う気にならないのよね

ちょっと語弊があるかも
複雑なプラットフォームであるのはわかるけどシェアトップなのはまぁそれなりの理由があるのと、規模のわりにシンプルに動く、あと使えるけど使わないのと最初から使えないのは話がちがうよね
そして実際アプリ側で細かな実装してあげる必要は全くなくて、udpかtcpでノートのストリームを送信してあげる機能(インデクシング周りはlogstashに任せる)、(esの)rest apiにユーザーのクエリを投げる機能だけサポートしてあげればesがつかえる鯖缶は勝手に使えると思う
前みたいにソースコードレベルでインテックスを管理してあげる必要はほぼないので、それで維持管理コストは解決できると思う

スケールに関しては、Misskeyで検索する頻度はそう多くないと思うから問題になりにくそう

検索を使わないように色んな機能盛り込んだから比較的使わなくても済むようになってるだけで実際必要になったら使えない状態なのはちょっとまずいかも

あと、大規模サーバーの場合はオンプレミスよりは(スケーラブルな)Meilisearch Cloud使った方が良いかも

それめちゃくちゃ高いので現実的じゃないかも
あとこの(Meilisearchの)実装だとcloudを使うとしても安定に動くとはちょっと微妙かも

(↑の追記)ざっくりソース見た感じそもそもベースのものが現時点では全くと言えるほどスケーラブルじゃないので結局自動化されたバックアップ+リストアとかで動いてそう、頻繁にデータが変わる使い方に向いてなさそうな実装と感じたため
あと使ってみたら鬼ほどストレージとメモリを食ってる(公式ドキュメントですら9.1MBのJSONが224MBになると言ってるし、手元では938KBのJSONが13MBになってる…)

@syuilo
Copy link
Member

syuilo commented May 3, 2023

Elasticsearchにするか

@syuilo syuilo closed this as not planned Won't fix, can't repro, duplicate, stale May 3, 2023
@tamaina
Copy link
Contributor

tamaina commented May 3, 2023

(ストレージとメモリが高速かつ大量ならCPUは貧弱でもいいのではと期待してみるけど実際どうなんだろう…まあそれも高くつくが)

@tamaina
Copy link
Contributor

tamaina commented May 3, 2023

メモリを大量に使うならCPUもある程度比例して使いそうだからだめだな

@rinsuki
Copy link
Contributor

rinsuki commented May 3, 2023

(というか昔の io で実績がある PGroonga は…)

@Steve-0628
Copy link

Steve-0628 commented May 3, 2023

パッと試したところ、MeiliSearchはストレージさえあれば割とと快適に動くかも知れません。
WSLで1Core 2GBに制限しても数十msで検索できます。Misskeyからダンプした180万件程度のノートで、ホストはRyzen 5 5600です。

@syuilo
Copy link
Member

syuilo commented May 3, 2023

ストレージ効率を犠牲にして高速性に特化したものだと思うから高速なのはそうなのだろうけど、大きいサーバーだと投稿数1億は普通に超えるから運用が厳しそう

@tamaina
Copy link
Contributor

tamaina commented May 3, 2023

PGroongaはp1.a9z.devで使ってるけどたまに遅かったり結果が微妙だったりはする

@tamaina
Copy link
Contributor

tamaina commented May 3, 2023

(たまに遅いというか検索結果が過去に遡るほど遅い

@syuilo
Copy link
Member

syuilo commented May 3, 2023

Meilisearchを選択肢のひとつとして実装するなら良いかもしれないけど、ドキュメントとか見てる感じaqzが言ったようにショッピングサイトとか検索対象がそこまで多くないユースケースが想定されてそうで、Misskeyのような毎秒投稿が追加されていくようなサービスにはあまり向いてなさそうだから小規模サーバーであっても結局はそのうち厳しくなってきそう

@tamaina
Copy link
Contributor

tamaina commented May 3, 2023

misskey.ioの全投稿をSSD8TB+RAM256GBぐらいで検索できるなら許容範囲だとは思う(それで収まるかは知らないけど)

@syuilo
Copy link
Member

syuilo commented May 3, 2023

投稿ではなくユーザーの検索とかだったらMeilisearchはちょうど良さそう

@u1-liquid
Copy link
Sponsor Contributor

パッと試したところ、MeiliSearchはストレージさえあれば割とと快適に動くかも知れません。
WSLで1Core 2GBに制限しても数十msで検索できます。Misskeyからダンプした180万件程度のノートで、ホストはRyzen 5 5600です。

たしかに応答速度に関してはいい感じだとは思います。HAもレプリケーションも無しで動かすのはちょっと不安だけど小規模なら許容範囲かも

ちなみに元のデータとmsのインデクスされてるデータのサイズはどのぐらいでしょうか?

@u1-liquid
Copy link
Sponsor Contributor

投稿ではなくユーザーの検索とかだったらMeilisearchはちょうど良さそう

たしかに

@syuilo syuilo reopened this May 3, 2023
@syuilo
Copy link
Member

syuilo commented May 3, 2023

あとローカルの投稿のみインデックス対象にするオプション実装すればそれなりに耐えられそう

@tamaina
Copy link
Contributor

tamaina commented May 3, 2023

(ユーザー検索ってそこまで遅かった?)

@tamaina
Copy link
Contributor

tamaina commented May 3, 2023

(p1.a9z.devでノート検索試してみようかなと思ったけど無理ゲーかも)

Screenshot_20230503-182159.png

@u1-liquid
Copy link
Sponsor Contributor

大きいサーバーだと投稿数1億は普通に超えるから運用が厳しそう

昔のついったーみたいに直前3ヶ月くらいはこれで検索して範囲外はesかPGroongaになげるみたいなことができたらいいかも

@Steve-0628
Copy link

Steve-0628 commented May 3, 2023

ちなみに元のデータとmsのインデクスされてるデータのサイズはどのぐらいでしょうか?

元のデータは、DBのnoteテーブルからid, createdAt, text, cw, userHostを抜き出したもので、280MB程度です。インデックス後のサイズ(このデータのみ新規にインデックスしたdata.msディレクトリのサイズ)は3.1GBになりました。

MeiliSearchのドキュメントにも、元データの10倍程度のディスクを用意してね、と書いてあるので、妥当な結果だと思います。

@u1-liquid
Copy link
Sponsor Contributor

ioレベルだとTB規模になりそうですが検索範囲をローカル+投稿の期間で絞ればなんとかなるかも…?

あとはやっぱりユーザーやチャンネル、ページ、PLAYなどの検索に使えたら便利かも

@jojobii-arks
Copy link
Contributor

Completed with release of v13.12.0 #10774

@tamaina
Copy link
Contributor

tamaina commented May 13, 2023

ioのインデックスは30GBで済んだらしい

@tamaina
Copy link
Contributor

tamaina commented May 13, 2023

(ローカル投稿限定で)

@syuilo
Copy link
Member

syuilo commented Sep 19, 2023

done

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
✨Feature This adds/improves/enhances a feature packages/backend Server side specific issue/PR
Projects
None yet
Development

No branches or pull requests

7 participants