本システムは SQLite を、メタデータ管理とベクトル検索エンジンの両方として利用します。
erDiagram
items ||--|| vec_items : "id (Primary Key)"
items {
integer id PK "自動インクリメント"
text content "文章本文"
text path "ファイルのパス等のメタデータ"
datetime created_at "登録日時"
datetime updated_at "更新日時"
}
vec_items {
integer id PK "items.id と一致"
blob embedding "384次元ベクトル (f32 LE)"
}
items テーブル (SeaORM 管理)アプリケーションの主要なデータを保存します。SeaORM によるマイグレーションと型安全な CRUD が可能です。
| カラム名 | 型 | 説明 |
|---|---|---|
id |
INTEGER | プライマリキー(自動インクリメント)。 |
content |
TEXT | ベクトルの元となったテキストデータ。 |
path |
TEXT | (オプション)ソースファイルのパスやタイトル。 |
created_at |
DATETIME | 作成時刻。SQLite の datetime('now', 'localtime')。 |
updated_at |
DATETIME | 更新時刻。トリガーにより自動更新。 |
vec_items 仮想テーブル (sqlite-vec)ベクトル検索を高速に行うための仮想テーブルです。vec0 モジュールを使用します。
CREATE VIRTUAL TABLE vec_items USING vec0( id INTEGER PRIMARY KEY, embedding FLOAT[384] );
items テーブルの ID と 1:1 で対応させます。検索には MATCH 句を使用します。これは sqlite-vec 特有の構文で、最も類似度の高いアイテムから順に、計算された「距離」とともに返却します。
SELECT i.id, i.content, v.distance FROM vec_items v JOIN items i ON v.id = i.id WHERE embedding MATCH ? ORDER BY distance LIMIT 10;
デフォルトでは L2 距離 (Euclidean distance) または検索パラメーターにより コサイン類似度 が使用されます。本システムの現在の実装では sqlite-vec の標準的な MATCH を利用しています。
items への登録と vec_items への登録は、アトミックなトランザクションとして扱われます(Rust 側で保証)。