RailsでPGroongaを使う。

とあるRailsアプリで全文検索が必要になったため、PGroongaを試してみました。

環境はそれぞれこんな感じ。(表示は一部省略)

% cat /etc/lsb-release
DISTRIB_DESCRIPTION="Ubuntu 16.04.1 LTS"

% sudo aptitude show postgresql
パッケージ: postgresql
バージョン: 9.5+173

% sudo aptitude show postgresql-9.5-pgroonga
パッケージ: postgresql-9.5-pgroonga
バージョン: 1.1.5-2~xenial1

まず、参考にしたのはこのページです。

Ruby on RailsでPostgreSQLとPGroongaを使って日本語全文検索を実現する方法 – ククログ(2015-11-09)

この記事ではRuby on Railsで作ったアプリケーションからPGroongaを使って日本語全文検索
機能を実現する方法を説明します。

そして、使ったそれぞれの関数のリファレンスはこちら。

実際のコードはこんな感じです。
PostgreSQLにエクステンションを追加するマイグレーション

PGroongaを使わせるためのインデックスを追加するマイグレーション
カラムがこうなっている理由はこちらです。

pgroonga.score関数 | PGroonga

pgroonga.score関数を使うには、pgroongaインデックスにプライマリーキーに指定したカラムを追加する必要があります。もし、プライマリーキーに指定したカラムをpgroongaインデ>ックスに追加していない場合は、pgroonga.score関数は常に0.0を返します。

全文検索をしているクラス
titleとbodyを検索対象にしています。

実際に使用するとこうなります。

> article = Article.full_text_search('桃太郎', true).first
> article.highlighted_body
=> むかしむかしあるところで<span class="keyword">桃太郎</span>という少年が鬼ヶ島に行って鬼を退治しました。

全文検索そのものと、キーワードのハイライトについてはよかったのですが、pgroonga.score関数でとれるスコアを使ったソートで問題が・・・(つづく)

ヒント: インデックス

タイトルとURLをコピーしました