Web系でよく使われている全文検索は、Mroonga という MySQL/MariaDB の全文検索用拡張機能があるようですが、なんとなくハードルが高い気がしてもっと小規模で手軽に扱える Sqlite3の全文検索(FTS)を使ってみました
Mroonga でなく、Sqlite にしたのは、特に根拠があるわけではなく Sqlite のほうがいろんな環境で使えるので直感で選んだだけです (^^)
検索すると Android や iOS での sqlite の全文検索情報は少し見つかりましたが、PHPの sqlite3, pdo_splite モジュールの全文検索に関する情報がほとんどありません。
何故ないかというと PHP に組み込まれている sqlite3, pdo_sqlite モジュールが全文検索に対応していない場合がほとんどという背景があると思われます
対応していない場合は、sqlite3, pdo_sqlite モジュールを再コンパイルする必要があるということで、手軽に試せないため使われない。もったいないことです
そこで、今回はエックスサーバーで sqlite3, pdo_sqlite モジュールを全文検索対応版に置き換える方法を紹介します (^^)
FTS対応版モジュールのコンパイル
コンパイルに関しては、前回 Vagrant VAW という仮想マシンを使った手順を紹介していますので、そちらを参照して下さい
sqlite3, pdo_sqlite モジュールの全文検索(FTS)対応コンパイル手順
※今回はここで作成した php 7.0.4 の sqlite3.so, pdo_sqlite.so を使います
エックスサーバーでの作業
PHP情報確認
エックスサーバーのサーバーパネルから対象となるドメインのPHPバージョンを切り替えます
※2016/5/11 現在で最新の 7.0.3 に切り替えました
FTP等でドキュメントルートに phpinfo.php (下記内容)をコピーします
<? PHP phpinfo(); ?>
これで phpinfo.php にアクセスすればPHP情報が分かります
重要
Configure の所を見ると redhat系linux の x86_64bit OS であることが分かります。従ってVagrant VAW の Cent OS 64bit と互換性があると判断して Vagrant VAWを使って作成した拡張モジュールを使用しました (^^)
ご自身の環境を確認して、redhat系linux の x86_64bit OS でないと思われる場合は、エックスサーバー上でモジュールのソースを取得してコンパイルする必要があるかも知れません
各自確認の上、判断して下さい
拡張モジュールの設置
FTPを使って接続してホームディレクトリ下に拡張モジュールのディレクトリを作ります
作成したディレクトリにVagrant VAW 環境で作成した拡張モジュールをコピーします
※ディレクトリ構成は自分で管理しやすいように適当に決めています (^^)
php.ini 設定
エックスサーバーのサーバーパネルから php.ini 設定を選択します
参照: php.ini設定について
php.ini 直接編集を選択します
ここに拡張モジュールのロードを追記します
※画像では、ホームディレクトリが /home/celtislab となっていますが、celtislab の部分はご自身のサーバーIDを記述して下さい
; FTS support pdo_sqlite, sqlite3 extensions extension="/home/[サーバーID]/local/lib/php/7.0.x/extensions/pdo_sqlite.so" extension="/home/[サーバーID]/local/lib/php/7.0.x/extensions/sqlite3.so"
追記が終わったら、設定ボタンを押して反映させて下さい
ブラウザで phpinfo.php にアクセスして、pdo_sqlite, sqlite3 モジュールが有効になっていれば反映されているはずです。
pdo_sqlite, sqlite3 が有効になっていなかったり、画面が白くなる等のエラーが発生した場合は、慌てずに php.ini の記述に間違いがないか確認しましょう
終わったら、phpinfo.php ファイルは消しておきましょう
以上
今日は、エックスサーバーにFTSに対応した pdo_sqlite の組み込み手順を紹介いたしました
以前作成した WordPressのプラグインを紹介するサービスで使用しているデータベースを MySQL から Sqlite に置き換える作業を現在行っています
その作業で Sqlite の良い所や悪い所も少しわかってきて、用途によって向き不向きもありますが、更新の少ない検索主体の用途ではかなり使えそうという感触です (^^)
まだまだ勉強中でまとまっていませんが、そのへんの記事も少しづつ書いてもっと SQlite を紹介したいと思います (^^)