SQLite / DuckDB: Vaporetto で日本語フルテキスト検索拡張を載せる
組み込み DB(SQLite・DuckDB)に軽量トークナイザ Vaporetto を足し、trigram 任せではない日本語 FTS(bm25 等)をローカル/Wasm でも試せる。
どんなときに使う?
- エージェントやローカルアプリで SQLite / DuckDB に日本語検索を足したい
- サーバレス/単一ファイル DB のまま検索したい(外部検索エンジンを立てたくない)
- ブラウザ上(DuckDB Wasm)でデモや軽い検索 UI を出したい
やり方(概要)
拡張の入口:
- SQLite: github.com
- DuckDB: github.com
- Wasm デモ: duckdb-vaporetto-wasm-demo.surge.sh
Vaporetto は点予測ベースで辞書なしモデルも取れ、サイズを抑えやすい。著者ブログでは約 2700 記事の SQLite FTS5 + vaporetto で bm25 検索が数 ms 台、という手触りが報告されている。
手順の骨格は「拡張を入れる → トークナイズ付き FTS テーブル/インデックスを作る → bm25 等でランキング」だが、API は各リポジトリの README を正とする。
注意点
- 形態素解析の観点では、点予測(とくに辞書なし)は文脈依存分割で検索漏れリスクがある、という指摘あり。本番の大規模検索では一貫性のある分割方式も検討する
- 件数が少ないと FTS / bm25 の旨味は薄い
- 拡張のビルド・ロード方法は OS/配布形態で異なる