Newer
Older
TelosDB / docs / database.md

データベース設計とベクトル検索仕様

本システムは SQLite を、メタデータ管理とベクトル検索エンジンの両方として利用します。

ER図

erDiagram
    items {
        integer id PK "自動インクリメント"
        text content "文章本文"
        text document_name "ドキュメント名・タイトル等"
        datetime created_at "登録日時"
        datetime updated_at "更新日時"
        blob embedding "768次元ベクトル (f32 LE)"
    }

テーブル詳細仕様

1. 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カラムをベクトルとして認識させる必要があります。
  • 次元数: 使用するモデル (Gemma 3 300M) に合わせて 768 次定数として定義されています。