読者です 読者をやめる 読者になる 読者になる

Bye Bye Moore

猫マンション建築の野望を胸に零細事業主として資本主義の荒波に漕ぎ出したアラサー男の技術メモ

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

sql

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