データベースは単一の SQLite ファイルとして管理されます。メタデータ管理用の標準テーブルと、ベクトル演算用の仮想テーブルの 2 つで構成されます。
erDiagram
items ||--|| vec_items : "1:1 Mapping (id)"
items {
integer id PK "Primary Key (Autoincrement)"
text content "文書本文"
text path "ファイルパス / 識別子"
datetime created_at "作成日時 (Default: localtime)"
datetime updated_at "更新日時 (Auto-trigger)"
}
vec_items {
integer id PK "items.id と同一"
blob embedding "768-dim Vector (f32 LE)"
}
items テーブル| カラム | 型 | NULL | 初期値 | 説明 |
|---|---|---|---|---|
id |
INTEGER | NO | AUTOINC | 保存文書のユニーク ID |
content |
TEXT | NO | - | 元のテキストデータ |
path |
TEXT | YES | - | ドキュメントの出典メタデータ |
created_at |
DATETIME | NO | CURRENT | 登録時のタイムスタンプ |
updated_at |
DATETIME | NO | CURRENT | 更新時のタイムスタンプ |
vec_items (Virtual Table)SQLite 拡張 sqlite-vec (vec0) モジュールを使用した仮想テーブルです。
items.id と同期。FLOAT[768] (内部的には BLOB 表現)sqlite-vec は、近似最近傍探索 (ANN) において以下の距離関数をサポートし、本システムでは MATCH 演算子による高速検索を実施します。
SELECT i.id, i.content, v.distance FROM vec_items v JOIN items i ON v.id = i.id WHERE embedding MATCH :query_vector ORDER BY distance LIMIT :limit;
items への登録が成功した後にのみ、関連付けられた ID で vec_items への書き込みが行われます。items テーブルに updated_at 自動更新用の SQLite トリガーを実装。