SQLite3には全文検索用の機能FTS3*1があります。
今回は導入と簡単な使い方。
下準備
全文検索対応カラムを作成します。
フツーのtableではなく、virtual tableていうものを使います。
既存のDBをコレに変換する方法については調査中……。
CREATE VIRTUAL TABLE ftssample1 USING fts3(content TEXT);
簡単に試したいので、仮データは3コほど……ゲーム由来の所謂EngRishから
INSERT INTO ftssample1 values('All your base are belong to us.'); INSERT INTO ftssample1 values('I feel asleep.'); INSERT INTO ftssample1 values('The truck have started to move.');
検索
使う分には楽で、基本的にはフツーのSELECTクエリです。
SELECT count(*) FROM ftssample1 WHERE content MATCH 'linux'; /* 0 */ SELECT count(*) FROM ftssample1 WHERE content MATCH 'to'; /* 2 */ SELECT count(*) FROM ftssample1 WHERE content MATCH 'a'; /* 0 */
ちょっと便利なワイルドカード検索
SELECT count(*) FROM ftssample1 WHERE content MATCH 'a*'; /* 2 */
MATCH節でカラムを指定する方法もあるみたいです。
SELECT * FROM ftssample1 WHERE ftssample1 MATCH 'content:all'; /* All your base are belong to us. 1 */
……と、これではタダのテキスト検索と何ら変わらないですね。
次回以降では
- 既存tableのschemaをFTS対応化
- AND/ORといった論理検索
- 一致したフレーズの強調
- インデックス付け
といった機能について扱っていきます。
参考もと
*1:上位互換?にFTS4