本システムは SQLite を、メタデータ管理とベクトル検索エンジンの両方として利用します。
erDiagram
items {
integer id PK "自動インクリメント"
text content "文章本文"
text document_name "ドキュメント名・タイトル等"
datetime created_at "登録日時"
datetime updated_at "更新日時"
blob embedding "768次元ベクトル (f32 LE)"
}
items テーブル (SeaORM 管理)アプリケーションの主要なデータを保存します。
| カラム名 | 型 | 説明 |
|---|---|---|
id |
INTEGER | プライマリキー(自動インクリメント)。 |
content |
TEXT | ベクトルの元となったテキストデータ。 |
document_name |
TEXT | (オプション)ソースファイルのパスやタイトル。 |
created_at |
DATETIME | 作成時刻。 |
updated_at |
DATETIME | 更新時刻。 |
embedding |
BLOB | ベクトルデータ。vector_init で初期化された 768次元の浮動小数点配列。 |
検索には vector_quantize_scan 関数を使用した JOIN を使用します。これにより、インデックスがなくても高速な類似検索が可能です。
SELECT
i.id,
i.content,
v.distance
FROM items i
JOIN vector_quantize_scan('items', 'embedding', ?, 10) AS v ON i.rowid = v.rowid
ORDER BY distance;
デフォルトでは L2 距離 (Euclidean distance) が使用されます。vector_init 時にパラメータで変更可能です。
SELECT vector_init(...) を実行して、BLOBカラムをベクトルとして認識させる必要があります。