misskey-dev / misskey

🌎 A completely free and open interplanetary microblogging platform 🚀
https://misskey-hub.net/
GNU Affero General Public License v3.0
10.09k stars 1.38k forks source link

feat(backend): pgroongaに対応(configの構成変更あり) #14978

Open samunohito opened 5 days ago

samunohito commented 5 days ago

※2024.11.0の差分もそこそこたまってきているのでこれより後のリリースにしたい

What

Why

fix #14730

Additional info (optional)

Checklist

github-actions[bot] commented 5 days ago

このPRによるapi.jsonの差分 差分はありません。 Get diff files from Workflow Page

codecov[bot] commented 5 days ago

Codecov Report

Attention: Patch coverage is 28.19149% with 135 lines in your changes missing coverage. Please review.

Project coverage is 39.97%. Comparing base (a3d236c) to head (d6df98b). Report is 449 commits behind head on develop.

Files with missing lines Patch % Lines
packages/backend/src/core/SearchService.ts 23.83% 131 Missing :warning:
packages/backend/src/GlobalModule.ts 42.85% 4 Missing :warning:
Additional details and impacted files ```diff @@ Coverage Diff @@ ## develop #14978 +/- ## =========================================== - Coverage 41.74% 39.97% -1.78% =========================================== Files 1549 1563 +14 Lines 196555 197822 +1267 Branches 2767 3635 +868 =========================================== - Hits 82055 79072 -2983 - Misses 113939 118145 +4206 - Partials 561 605 +44 ```

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.


🚨 Try these New Features:

fruitriin commented 5 days ago

芸細な話でいうと、

query.andWhere('note.text ILIKE :q', { q: `%${sqlLikeEscape(q)}%` });

ここを note.cw + note.text みたいにして cwも検索対象に含める(インデックスは cwとtextを結合したものをあらかじめ作っておく)と個人的により神です

samunohito commented 5 days ago

ここを note.cw + note.text みたいにして cwも検索対象に含める(インデックスは cwとtextを結合したものをあらかじめ作っておく)と個人的により神です

related: https://github.com/misskey-dev/misskey/issues/14373

samunohito commented 5 days ago
explain analyse select * from note where "userId" = 'id' and text &@ 'text';

explain analyse select * from note where "userId" = 'id' and (array[text, cw] &@ 'text');

とすることでcwを含めた検索も可能となりますが、挙動が明確に変わるので別対応とします。

また、上記クエリに対応させるとindexの作成方法も変わってきます…

CREATE INDEX idx_note_text_and_cw_combined_with_pgroonga ON note USING pgroonga ((array[text, cw]));
fruitriin commented 5 days ago

実際導入してみてnitsな指摘ですが、コンパネから現在の検索プロバイダをどのモードとして認識しているか確認できると嬉しいかもと思いました (configしたつもりで認識されてないわーとか起きそうだなと) まあ熟練のサーバー管理人ならそんな失敗しないかもしれませんけど! (私はconfigだけいじってコードの適用を忘れていましたの札)

samunohito commented 5 days ago

いいアイデアだと思います。 …が、実現するにはconfigの値をフロントエンドまで伝搬させる必要があり、現実的ではなさそうです。

代わりに、プロバイダの名称をサーバ起動時にログ出力するようにしたのですが、多少は改善されるでしょうか… image

fruitriin commented 5 days ago

十分だと思います!ありがとうございます