セマンティック検索を有効にする
Notarium の全文検索(FTS)は常に、設定なしで動きます。セマンティック(ベクトル)検索はオプションの機能です。意味に基づくハイブリッドランキングを追加しますが、その代わりに重量級のネイティブスタック(onnxruntime + sqlite-vec、ディスク上で約 660 MB)と、初回有効化時にダウンロードされるローカルの埋め込みモデル(ディスク上で約 600 MB、RAM 数百 MB)を引き込みます。だからこそデフォルトでは無効で、意図して有効にする形になっています。検索が内部でどう動くかはコンセプト: 検索を参照してください。
2つの独立したスイッチ
インストールとランタイムという2つのレベルを分けて考えると分かりやすくなります。
- インストール — ネイティブのベクトルスタックが
node_modulesに存在するかどうか。Docker イメージには常に同梱されているため、コンテナ内で有効化するのに再ビルドは不要です。ソースから動かす場合、標準のmake depsはこれをインストールしません(ローカルのnode_modulesが約 660 MB 軽くなります)。ローカルでベクトルを扱うにはmake deps-vectorが必要です。 - ランタイム —
VECTOR_SEARCH変数。公開イメージではデフォルトでoffです。
Docker でセマンティック検索を使うには、ランタイムスイッチを切り替えるだけで十分です。スタックはすでに配置済みだからです。
有効化
docker run -d --name notarium \
-p 3000:3000 \
-v notarium-data:/data \
-e VECTOR_SEARCH=on \
docouno/notarium:latest
(単一の /data ボリュームがすべての状態を保持します — メタデータデータベース、インデックス、あなたのノート、エクスポート成果物。通常の起動時と同じで、インストールを参照してください。ここでは VECTOR_SEARCH=on が追加されただけです。)
初回有効化時に、デフォルトモデル(bge-m3)がダウンロードされ(ディスク上で約 600 MB)、RAM を数百 MB 使用します。インデックス作成はバックグラウンドで進みます。全文検索はすぐに使えて、その裏でベクトルが追いつきます。
モデルティア
モデルは EMBED_MODEL + EMBED_DIMENSIONS のペアで選びます(次元数はモデルと必ず一致させる必要があります)。これは単一イメージ上のランタイム設定であり、別のビルドではありません。
| ティア | 変数 | RAM | 使いどころ |
|---|---|---|---|
| off | VECTOR_SEARCH=off | 0 | 非力なマシン、またはキーワード検索で十分な場合。イメージのデフォルト。 |
| compact | VECTOR_SEARCH=on, EMBED_MODEL=Xenova/multilingual-e5-small, EMBED_DIMENSIONS=384 | 約 120 MB | ホームラボ、小さな VPS。 |
| full | VECTOR_SEARCH=on(デフォルト: bge-m3, 1024) | 約 600 MB | 高性能なマシン。100 以上の言語、長いコンテキスト。 |
compact ティア(e5)にはプレフィックス EMBED_QUERY_PREFIX="query: " と EMBED_PASSAGE_PREFIX="passage: " が必要です。これらを忘れると、検索品質が黙って劣化します。対称な bge-m3 では逆で、プレフィックスは設定してはいけません。
余裕のないマシンでのリソース
swap がなく RAM が約 6 GB のホストでは、bge-m3 の初回インデックス作成がメモリ上限にぶつかることがあります。手立ては2つ。compact ティア(e5-small)を使うか、EMBED_CPU_MEM_ARENA=off を設定するかです。後者はわずかな速度低下と引き換えに消費を約 1.9 GB に抑えます。埋め込みパラメータの一覧はリファレンスを参照してください。
全文検索へのフォールバック
VECTOR_SEARCH=off の場合、あるいはネイティブスタックが何らかの理由でロードに失敗した場合でも、検索は全文に対して動き続けます — エラーなしで、結果の見た目も変わりません。セマンティック検索は、常時稼働する FTS の上に乗る追加のランキングチャネルであって、必須の依存ではありません。ベクトルのないインスタンスも、完全に機能するインスタンスです。