SQLite + Python で全文検索をさせるまで。

最近のPythonにはすでにSQLiteが組み込まれているわけですが、全文検索するための外部モジュールは使えなかったりする(FTS2とかなら行けるかも知れないけど、少なくとも俺の環境ではできなかった。もしかして再コンパイル必要?)ので、使える方法模索。

一応、環境は、

  1. CentOS 5.5
  2. Python 2.5.5

だったと思います。

最初にpysqlite2の導入

まず、PySqlite – The Trac Projectをダウンロードしてインストールしましょう。これでおおかた終わりです。

$ wget http://pysqlite.googlecode.com/files/pysqlite-<version>.tar.gz
$ tar zxvf pysqlite-<version>.tar.gz
$ cd pysqlite-<version>
$ (sudo) python setup.py build_static install

これで、Python単体であれば、全文検索するための、SQLite3.5とPython用のバインディングが導入されるはず。
実際の使い方は、標準の

import sqlite3

ではなくて、

from pysqlite2 import dbapi2 as sqlite3

とかでimportしてあげて、以降メソッド等の使い方は同じなので割愛。

テーブルを作ろう

テーブルは、

CREATE TABLE <テーブル名> ( 列名 type, ...);

ではなく、

CREATE VIRTUAL TABLE <テーブル名> USING FTS3( 列名 type, ...);

とかにしてあげましょう。

全文検索をかける列の要素には、分かち書きをした文字列を入れてあげましょう。
MeCabとか使うとやりやすいと思います。