前回のつづき。SQLite3のFullTextSearch(FTS)のドキュメントをざっと見てみる。
開発環境
- Linux Mint 17.3 MATE 32bit
SQLite3
https://www.sqlite.org/download.html
FTS資料
FTS | 翻訳 |
---|---|
SQLite FTS3 and FTS4 Extensions | 翻訳 |
SQLite FTS5 Extension | 翻訳 |
バージョン
SQL | FTS | 説明 |
---|---|---|
? | 1 | 非推奨。 |
? | 2 | 非推奨。 |
3.5.0 2007-09-04 | 3 | LIKE句よりも高速に全文検索できる。 |
3.7.4 2010-12-07 | 4 | FTS3と同一インタフェース。ディスク容量を犠牲にして高速化。ランキング順位付もされる。 |
3.9.0 2015-10-14 | 5 | FTS4より検索方法(AND,OR,NOT)が増えた。また一致付近のテキスト取得するスニペット関数もある。 |
FTS3と4は同一インタフェースなので互換性がある。しかし、FTS5にはない。性能改善もあるためFTS5のほうが好ましいと思われるが、詳しくはわからない。
FTS3とFTS4
SQLite FTS3 and FTS4 Extensions
Google翻訳
FTS3とFTS4はほぼ同じです。彼らは共通のコードの大部分を共有し、それらのインターフェースは同じです。
FTS3と4のインタフェースは同じらしい。同一の関数を使用するという意味だろう。だからコード上でFTS3
とあるものはFTS4
と共通だと。
FTS4はFTS3の強化版です。 FTS3はSQLite バージョン3.5.0 (2007-09-04)以降に公開されています。FTS4の拡張機能はSQLite バージョン3.7.4 (2010-12-07)で追加されました。
私の環境でapt-get
したSQLite3のバージョンはは3.8.2 2013-12-06
だった。FTS4が実装されているはず。ただ、FTSを有効にして再コンパイルが必要なのだろうが。
FTS4は、マッチ操作の結果のランク付けに役立つ強化されたmatchinfo()出力を提供します。
FTS4は検索順位付けしてくれるらしい。ありがたい。しかしFTS4は3よりもディスク容量を多く消費するらしい。
FTS4テーブルはFTS3を使用して作成された同等のテーブルより多くのディスクスペースを消費する可能性があります。 通常、オーバーヘッドは1〜2%以下ですが、FTSテーブルに格納されたドキュメントが非常に小さい場合は、10%もの高さになることがあります。
ディスク容量と検索速度&品質のトレードオフ。
FTS4テーブル宣言の一部として"matchinfo = fts3"という指示を指定することで、オーバーヘッドを減らすことができますが、これは余分にサポートされているmatchinfo()オプションの一部を犠牲にしています。
順位付け機能を無効にすることで、ディスク容量の消費を抑えることもできるらしい。
FTS5
FTS5は3,4と異なるインタフェースらしい。
機能も増えているし性能も改善されていると思われるため、新しいのを使うほうがいいか。