RailsでPostgreSQLとPGroongaを使って日本語全文検索を実現する方法PostgreSQLは標準機能では日本語のテキストを全文検索することはできません。PostgreSQLにPGroonga(ぴーじーるんが)という拡張機能を導入することで日本語のテキストを全文検索できるようになります。PGroongaは高速です。Wikipedia日本語版のテキスト(約185万件・平均約4KB)から約2万件ヒットするような全文検索をしても0.2秒かかりません。PostgreSQLと全文検索エンジンサーバーを組み合わせて日本語全文検索を実現することもできますが、管理するサーバーが増える・SQL以外に全文検索エンジンサーバーのことを覚える必要があるなど開発・運用時のコストが高くなります。PostgreSQLだけで完結できた方が開発時も運用時も楽になります。実現する方法を説明します。実際にドキュメント検索システムを開発する手順を示すことで説明します。7を用いますが、他の環境でも同様の手順で実現できます。PostgreSQLとPGroongaのインストールまずPostgreSQLとPGroongaをインストールします。7以外の場合にどうすればよいかはPGroongaのインストールドキュメントを参照してください。2.2をインストールします。Railsをインストールします。持ったドキュメント検索システムを開発します。newで雛形を作ります。gem)をビルドするためにpg_configコマンドがインストールされているパスをPATH環境変数に指定しています。指定しなくてもpg_configコマンドが見つかるなら指定する必要はありません。gemを有効にします。Gemfileから次の行のコメントを外します。gemをインストールします。installPostgreSQLに接続するユーザーを作成します。EXTENSIONを実行するにはスーパーユーザー権限が必要だからです。EXTENSIONはPGroongaを有効にするときに使います。--superuserユーザーを作成しPostgreSQLにデータベースを作成できるようになったのでデータベースを作成します。db:createここまでは(ほぼ)PGroongaと関係ない手順です。アプリケーションがPostgreSQLを使う場合にはよくある手順です。ここからはPGroongaを使う場合に特有の手順になります。データベースでPGroongaを使えるようにします。マイグレーションファイルを作成します。db/migrate/20151109091221_enable_p_groonga.rbdb/migrate/20151109091221_enable_p_groonga.rbを次のような内容にします。search_pathを設定しているのはPGroongaが提供している演算子をpg_catalogにある組み込みの演算子よりも優先的に使うためです。endendこれでPGroongaを使う準備が整いました。続いて検索対象のドキュメントを格納するテーブルを作成します。db:migrate全文検索用のインデックスを作成します。マイグレーションファイルを作成します。db/migrate/20151109092724_add_full_text_search_index_to_documents.rbdb/migrate/20151109092724_add_full_text_search_index_to_documents.rbは次のような内容にします。"pgroonga"を指定してインデックスを追加することがポイントです。endendこのマイグレーションファイルを反映します。db:migratePostgreSQL側の準備はできたのでアプリケーション側に全文検索機能を実装します。モデルに全文検索用のスコープを定義します。PGroongaでは@@演算子で全文検索をします。キーワード2」のようにORを使ったクエリーを指定できます。}endビューにヒット件数表示機能と検索フォームをつけます。検索フォームではqueryというパラメーターに検索クエリーを指定することにします。<tr>最後に、コントローラーで全文検索を使うようにします。