コンテンツにスキップ

検索

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 をご覧ください。