SQLite をメタデータ・ベクトル・全文検索のいずれにも利用します。vec_items の次元数はエディションにより異なります(Community: 50、Pro: 768)。検索は FTS5 とベクトル検索のハイブリッドです。
erDiagram
documents ||--o{ items : "1:N"
items ||--|| vec_items : "1:1"
items ||--|| items_fts : "1:1 (FTS5)"
items ||--o| items_lsa : "1:1 (Community)"
documents {
int id PK
text path UK
text mime
datetime created_at
datetime updated_at
}
items {
int id PK
int document_id FK
int chunk_index
text content
datetime created_at
datetime updated_at
}
vec_items {
int id PK "items.id"
blob embedding "50d(Community) or 768d(Pro)"
}
items_fts {
int rowid PK
text content "FTS5 trigram"
}
items_lsa {
int id PK "Community: LSA 用メタデータ"
blob 等
}
マージ: 各チャンク ID について、両スコアの大きい方を採用し、降順でランキング。必要に応じて文書単位にまとめ(group_by_document)。
ベクトルが使えない場合(Pro でモデル未ロード等)は FTS のみで検索可能。
initialize_database で現在の vec_items のテーブル定義(sqlite_master)を確認する。FLOAT[n] が一致しなければ、vec_items を DROP してから正しい次元で再 CREATE する。db::check_and_init_vector_table。GET /heal で FTS の不足行を同期。Pro の vec_items 不足は RE-INDEX(lsa_retrain)で補完。Pro のベクトル化・ANN の詳細は 07_embedding_tract.md・11_pro_vectorization_and_ann.md を参照。