Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

SQLite3の全文検索機能"FTS"をつかってみる その1:導入

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