検索¶
PGroonga を選んだ理由¶
メッセージには日本語と英語が混ざります。Taylis は PostgreSQL の拡張の PGroonga で全文検索をしています。
- 日本語も英語も、分かち書きなしで探せます。
- 検索のための別のサーバ(Elasticsearch など)が要りません。データベースのバックアップに索引も含まれます。
- 「その人が読めるメッセージだけ」という権限の条件を、同じ SQL の中で確実に付けられます。
- 将来、意味で探す検索(ベクトル検索の pgvector)を同じデータベースに足せます。
PostgreSQL 標準の tsvector は日本語に弱く、pg_trgm は大量のデータで遅くなるので選びませんでした。
探せるもの¶
- メッセージの本文と、添付ファイルの名前
- キャンバスの題名と本文
- ファイルの一覧
結果は、その人が読めるもの(参加しているチャンネル、参加前に見られる公開チャンネル。アーカイブ済みも)だけです。 ゲストは参加しているチャンネルだけ、管理者が参加前のプレビューを切ったワークスペースでは全員が参加しているチャンネル だけになります。
flowchart TD
Q["検索語と修飾子<br>from: in: after: …"] --> APP["app"]
APP --> SQL["1 つの SQL<br>PGroonga の索引<br>+ 読める会話だけ"]
SQL --> R["結果"]
R -. "AI に聞く" .-> AI["AI が出典つきで答える"]
絞り込みの書き方¶
検索欄のボタンで絞り込めるほか、修飾子も使えます。
| 書き方 | 意味 |
|---|---|
from:@hanako |
その人の投稿 |
in:#general |
そのチャンネル |
after:2026-04-01 / before:2026-05-01 / on:2026-04-15 |
日付(after / before はその日を含みません) |
has:file / has:link / has:pin / has:reaction / has:poll |
添付・リンク・ピン留め・リアクション・アンケートのあるもの |
is:thread |
スレッドの返信と、返信のある親 |
is:times |
Times(作業ログ)だけ |
修飾子だけで検索すると、条件に合うものを新しい順に並べます。
速さ¶
46 万件のメッセージで、検索は数十〜百数十ミリ秒で返ることを確かめています。重い検索が投稿や同期を待たせないよう、 同時に走る検索の数に上限を設けています。
AI に聞く¶
AI を有効にしたサーバでは、「AI に聞く」がこの全文検索で関係のありそうなメッセージを(その人の権限で)拾い、 番号付きの出典として AI に渡して答えを作ります。埋め込み(ベクトル)はまだ使っていません。
詳しくは docs/DATA_MODEL.md の「代表的なクエリ」と docs/ARCHITECTURE.md をご覧ください。