検索
Engram はノートの内容をセマンティック検索のためにインデックス化します。これは、言い回しが違っていても、クエリと似た意味を持つノートを見つける検索です。完全一致の検索にも対応していますが、どこで実行されるかは範囲によって異なります。
Engram の検索方法
Section titled “Engram の検索方法”- 保管庫全体のセマンティック検索。 すべてのノートの埋め込みに対するベクトル類似度です。文字どおりのテキストだけでなく、関連するアイデアを見つけます。現在、Web アプリの検索パネルで実行されるのはこれです。
- キーワード検索とハイブリッド検索。 バックエンドは、暗号化と両立するキーワード (字句) 検索と、字句とベクトルの結果を統合するハイブリッドモードのためにも、ノートをインデックス化します (下記参照)。これらはバックエンドでは提供されていますが、Web アプリの検索パネルにはまだモードの切り替えがなく、現時点ではセマンティックのクエリを発行します。
- 開いているノート内の完全一致。
Ctrl/Cmd+Fとエディターの検索/置換は、現在のセッションで復号されたノートに対して、一般的なテキストエディターと同じように動作します。
リテラル検索や正規表現検索は?
Section titled “リテラル検索や正規表現検索は?”Engram は、保管庫全体に対するキーワード (字句) 検索に対応しています。しかも、保存時の暗号化を損なうことはありません。バックエンドは平文をスキャンするのではなく、チャンクごとのスパースベクトルを HMAC(your vault key, token) をキーとして索引化します。そのため、サーバーは読めるノート本文を一切持たないまま、クエリの語句を索引と照合できます。キーワード、セマンティック (ベクトル)、そしてハイブリッド (字句とベクトルを、サーバー側で Reciprocal Rank Fusion により統合) の各モードは、いずれもバックエンドで提供中です。
そのため、生のテキストに対する真の部分文字列検索や正規表現検索は、サーバー側ではいまだにできません (索引は文字ではなくトークン単位のため)。正規表現、大文字小文字を区別する検索、パスで絞り込むリテラル検索には、引き続き Obsidian のローカル検索ペイン (ディスク上の .md ファイルを対象に動作) を使ってください。エディターの Ctrl/Cmd+F も、開いているノート内の検索に使えます。
Engram の検索と Obsidian の検索は、補い合う関係にあります。クラウドではセマンティック、キーワード、ハイブリッド。ディスク上では、正規表現、大文字小文字の区別、パスで絞り込むリテラル検索です。Obsidian のローカル検索ペインは、Engram が同期している保管庫そのものに対して実行されます。
どこから検索するか
Section titled “どこから検索するか”- Web アプリの検索パネル (検索レール): 現時点ではセマンティックのクエリ
- Obsidian プラグインは、Web アプリと同じバックエンドに対して検索を実行します
- Obsidian の検索ペイン: ディスク上の保管庫に対する、正規表現、大文字小文字の区別、パス指定のリテラル検索
正規表現のパターンや、パスで絞り込んだリテラルの一致が必要なときは、Obsidian のローカル検索を使ってください。
ランキングの仕組み
Section titled “ランキングの仕組み”- クエリが埋め込まれます (クエリ用のモデルは、ドキュメント用のモデルとは非対称で、インデックス化ではなく検索向けに調整されています)
- Qdrant が、バイナリ量子化とリスコアを使って、上位 K 件のベクトル一致を返します
- リランカーが設定されている場合 (バックエンドに
RERANKER_BACKEND=jinaとJINA_URL)、候補はベクトルとリランカーのスコアを 40/60 で混ぜて並べ替えられます。設定されていない場合は、ベクトルの順位がそのまま使われます
既定のクラウド構成は、現時点ではリランカーなしで動いています。Jina のアダプターは用意されており、有効にできる状態です。
フォルダーでの絞り込み
Section titled “フォルダーでの絞り込み”検索をフォルダーに限定する機能は、API で対応しています。folder=<path> のクエリパラメーターを渡してください。folder:work/ のような検索ボックスのクエリ構文は、ロードマップにありますが、UI にはまだ組み込まれていません。
セマンティック検索の精度が下がるとき
Section titled “セマンティック検索の精度が下がるとき”- 保管庫がとても小さい (20 件未満)。 比べる埋め込みが少ないため、保管庫が育つまで結果にノイズが乗りがちです
- 取り込んだばかりのノート。 埋め込みは Oban で非同期に実行されるため、書いたばかりのノートが結果に現れるまで数秒かかることがあります
- 非常に特殊な専門用語。 セマンティックな類似度は、概念に最も向いています。正確な識別子 (関数名やエラーコード) には、キーワード検索とハイブリッド (字句 + ベクトル) 検索のほうが適しています。どちらもバックエンドでは提供中で、Web アプリの UI への公開はこれからです。それまでは、Obsidian のローカル検索で正確な識別子を探せます。