Notariumドキュメント
ドキュメントのバージョン: latest

ハイブリッド検索

Notariumの検索は、互いを補い合う独立したチャネルで構成されています。全文検索(字句検索)は常に利用でき、設定は不要です。意味に基づくセマンティック検索と、グラフのリンクを考慮する仕組みは、その上に重ねるオプションの層です。各チャネルの結果はひとつのランキングに統合され、オプション層が利用できない場合でも、検索はエラーを出さずに全文で動作し続けます。

3つのチャネル

チャネル何をするかいつ機能するか
字句(FTS/BM25)単語やフレーズの正確な一致を見つけ、BM25でランク付けする常時、設定不要
セマンティック(ベクトル)共通する単語がなくても、意味的に近いものを見つけるオプション(VECTOR_SEARCH)
グラフブースト[[ウィキリンク]]をたどってヒットの隣接ノートを引き寄せるオプション(GRAPH_BOOST)、デフォルトは無効

字句チャネルは土台です。起動直後から動作し、追加でインストールするものは何もありません。セマンティックチャネルは意味の理解(類義語、言い換え)を、グラフブーストはノート間のリンクの知識を加えます。

結果の統合のしくみ

各チャネルはRRFアルゴリズム(Reciprocal Rank Fusion、k=60)で統合されます。それぞれのチャネルが独自のランク付きリストを生成し、RRFはそれらを比較できない「生の」スコアではなく順位によって共通のランキングにまとめます。こうして字句的な一致と意味的な近さがともに重み付けされます。統合はノート単位で、その安定した識別子に基づいて行われます。

flowchart LR
  q([クエリ]) --> fts[字句 · FTS/BM25]
  q --> vec[セマンティック · ベクトル]
  q --> gr[グラフ · 1-hop]
  fts --> rrf{RRF融合}
  vec --> rrf
  gr --> rrf
  rrf --> res([結果])

セマンティックが利用できない場合

セマンティック層は無効になっていたり、利用できなかったりすることがあります。VECTOR_SEARCHが有効になっていない、ベクトルスタックがインストールされていない、モデルが読み込まれなかった、クエリベクトルの計算がタイムアウトした、といった場合です。いずれの場合もクエリは字句チャネルによって処理されます。検索は常に応答し、セマンティックがないからといってエラーを出すことはありません。

セマンティックはオプトイン

ベクトル検索は重量級のネイティブスタック(ディスク上で約660 MB)を引き込み、埋め込みモデルをメモリに読み込みます(数百MBのRAM)。そのため公開イメージではデフォルトで無効になっています。有効化の方法とモデルの選び方は検索のセットアップで扱います。

どこで検索するか

  • Spotlight / OmniSearch — ノートへの高速でランク付けされたジャンプ。ここでは完全なハイブリッドが機能します。単語の正確な一致だけでなく、関連性が重視されます。検索とSpotlightを参照してください。
  • フィードフィルタ(フィード?q=)— コーパス全体に対する字句フィルタです。用語が実際に登場するノートを残し、フォルダ・タグ・日付のフィルタと組み合わさります。

インデックスとその再構築

検索インデックスは派生した知識です。ファイルから構築され、再スキャンで完全に復元できます。インデックスはスペースごとに1つです。埋め込みモデルの変更はマイグレーションではなく、ベクトル部分のゼロからの再構築です。大規模なコーパスでのベクトルインデックスの初回構築は数分、場合によっては数時間かかります。その間、インターフェースには「Building search index…」インジケータが表示されますが、検索自体は字句モードで利用可能なままです。

関連トピック: ナレッジグラフ — 第3のチャネルがどこから来るか、検索のセットアップ — セマンティックの有効化とティアの選択、File-first — なぜインデックスが復元可能か。