概要
SQLiteのソースツリーに、公式のベクトル検索拡張「vec1」が統合された。2026年9月30日にext/vec1/ディレクトリが追加され、以来1月から進められてきた開発がSQLite本体のコードベースに合流した形になる。実装はvec1.c単体でおよそ1万3千行、加えて50ファイル・約6,700行のテストが付属するという大規模なものだ。これまでベクトル検索を使うにはAlex Garcia氏によるサードパーティ拡張「sqlite-vec」などを別途導入するのが定番だったが、vec1はSQLite開発チーム自身の手で書かれ本体ツリーに取り込まれた初めての公式実装であり、組み込みDBとしてのSQLiteの使われ方を大きく広げる可能性を持つ。
技術的な詳細
vec1は仮想テーブル機構を通じてベクトル検索機能を提供する。テーブルの作成とインデックス構築は次のように行う。
CREATE VIRTUAL TABLE v USING vec1;
INSERT INTO v(cmd, vector) VALUES
('rebuild', '{index:"flat", distance:"l2"}');
INSERT INTO v(rowid, vector) VALUES
(1, vec1_from_json('[0,0,0,0]'));
SELECT rowid, distance FROM
v(vec1_from_json('[0.9,1,1.1,1]'), '{K:2}');
距離計算はL2(ユークリッド距離)とコサイン距離に対応する。近似最近傍探索のアルゴリズムにはIVFADCを採用し、事前にk-meansでベクトルをバケットに分割しておき、検索時には近そうなバケットだけを確認することで計算量を削減する。さらにOPQという量子化手法でベクトルを回転させてから小さなコードへ圧縮し、メモリ使用量と計算コストを大幅に抑えている。性能面ではx86向けにAVX2、ARM向けにNEONを使ったSIMD化が施され、実行環境に応じて動的に最適な実装へ切り替わるため、AVX2非対応のCPUでも問題なく動作する。外部依存のないポータブルなC実装である点も特徴で、サーバーを必要としないSQLiteの設計思想をそのまま継承している。
現状と今後の展望
vec1は現時点でバージョン0.8にあたり、1.0に必要な機能は揃ったものの正式リリース前の段階にある。配布形態としてはamalgamationには含まれておらず、利用するにはローダブル拡張としてmake vec1.soを実行し明示的にビルドする必要がある。テストはまだ十分とは言えない状態だが、MSVC対応や細かな修正が日々コミットされており開発は活発に進んでいる。元記事の著者は、埋め込みモデルを使わず音の近さだけから日本語単語を検索するツール「yomivec」でvec1を実際に試し、22万語の取り込み(インデックスへの登録)が2秒で完了したことを報告している。SQLiteはサーバー不要でファイル1つで動作するため、スマートフォンアプリやブラウザなど様々な環境に組み込まれてきた経緯がある。そこに公式のベクトル検索機能が加わることで、外部サービスに依存せずに意味検索を実現できる場面が広がることが期待されており、正式リリースへの注目が高まっている。