2010-04-30

global-messages-db.sqliteを開いてクエリーを行う方法

ちょっと相談されたのだけど、皆さんに共有すべき内容かもしれないのでエントリとして残しておく。

Thunderbird 3ではメールの全文検索のために、SQLite3を利用しているのだけど、日本語や中国語をサポートするために、mozporterという名前の専用のtokenizerを持っている。なので、Thunderbird 3のプロファイルの中にあるglobal-messages-db.sqliteを開いて、SELECT * FROM messageTextなんてやっても、tokenizerがないということでエラーになる。

で、どうやってこのテーブルを開くかなんだけど、このテーブルを開くには、ダミーのmozporterを登録すればいい。以下の方法はsqlite3のシェルでのやり方

  1. porter tokenizerのアドレスを取得
    sqlite> select hex(fts3_tokenizer('porter'));
    00EF420A8C7F0000
  2. ダミーのmozporterをそのアドレスで登録
    sqlite> select fts3_tokenizer('mozporter',X'00EF420A8C7F0000');

こうすることで、messageTextとかを開くことができる。インデックスを更新する(データの挿入、更新等)をしなければ、おそらく大丈夫かと。ただし、MATCH検索等、インデックスが必要なクエリーは正しく動作しないはず。(ASCII文字は問題ないはずで、それ以外は自分でbi-gram化するとかすれば検索できるとは思う)

0 件のコメント: