やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

SQLite3のFTSについて概要を抑える

前回のつづき。SQLite3のFullTextSearch(FTS)のドキュメントをざっと見てみる。

開発環境

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と異なるインタフェースらしい。

機能も増えているし性能も改善されていると思われるため、新しいのを使うほうがいいか。

所感

C言語で拡張トークナイザを実装することになるかもしれない。私にできるのか。