Railsで使えるGem

Rails4.1で全文検索〜rroonga

投稿日:

RailsでGroongaを使う選択肢

Railsから全文検索エンジンGroongaを使うには
mroonga MySQL用のストレージエンジン
textsearch_groonga PostgreSQLでGroongaエンジンを利用した汎用インデックス.
rroonga RubyからGroongaを使うライブラリ

その他、ActiveGroongaというライブラリもあるみたい.

mroongaやtextsearch_groongaを使えば簡単にActiveRecordから全文検索が使えそう.rroongaで実装すればherokuなどでも全文検索を使うことができる.

今回は、rroongaを使ったサンプルを参考に(というかほぼ丸写しで)一歩一歩実装してみた.

サンプルのアプリ

記事(Article)という実体にタイトル(String)と内容(Text)という要素

Gemfile

そして、bundle install.事前にGroongaをインストールしておけば早くすむ.

データベースへの接続

データベースは、Rails_Root/groonga/databaseに置くことにして、まず、データベースファイルとの接続をさせる.

データベースファイルがあれば、接続して、なければ新規に作成する.

config/initializers/groonga.rbを作成する.

require ‘groonga’としてて、’rroonga’でないのは、rroongaライブラリのルートファイルがgroonga.rbだから.

スキーマの設定と同期

Groongaのスキーマを定義する.Groonga::Schema.defineを使う.
ActiveRecordと同じテーブルをGroongaでも作り、こちらにインデックスを作るという方式で.
再起動のたびにActiveRecordの情報とGroongaの情報を同期するようになっている.

Rails_Root/groonga/init.rbをつくる.

Foremanをインストールして、

Procfileを作り

とすれば、

で、以後、サーバー起動前にinit.rbを実行してくれる.

ただ、Indexer(情報を登録する役割)を作っていないのでエラーになる.

データベースへの情報の登録

lib/article_indexer.rbを作成

config/application.rbで、Railsのautoload_pathsを追加しておく.

foreman startすると、情報がGroongaの方にも登録されているのを確認できる.

次に、ActiveRecordに保存したら自動的にGroongaの方にも登録されるようにする.after_saveを使えばできる.

検索

サーチ用のフォーム

StrongPrameters

検索語のValidate

こんなやり方あるんだとすごいと思ったところ.Modelに検索条件用のモデルを作ってvalidateする.

Searcherクラス

本文に比べてタイトルは5倍の重み付けがしてある.
全角スペースにも対応させておきたい.

lib/article_searcher.rb

Controller

indexアクションで、なにもなければ全部、検索で絞り込んだ結果があれば表示する.

ハイライト

パトリシアトライのtag_keysを使う.

-Railsで使えるGem
-, ,

執筆者:

関連記事

Rails4.0で添付したpdfファイルの中身を全文検索の対象にする〜carrierwave、pdftotext、pg_bigm

By: Uncalno Tekno – CC BY 2.0 環境 Ubuntu server 12.04 sunspot_cellにしようとおもってたけど、ライブラリとか勉強することが多く …

Rails4でフォーム要素を動的に追加したり削除したり〜nested_form

目次1 参考2 前提の環境3 Gemfile4 View5 Controller6 できた7 パーシャル化8 フォームを追加する場所を指定する9 一対一の場合10 そのほか11 番外編: 1つのモデル …

Rails3.2のproduction環境で動画再生~flowplayer+carrierwave+nginx+unicorn

  By: Creative Tools – CC BY 2.0 目次1 前提2 unicornの設定3 nginxのインストール4 nginxの設定5 アセット関係6  ストリ …

FullCalendarのagendaViewでselectの場所がずれる問題

  By: Ben Piddington 前回 Rails3.2でGoogle Calendarライクなカレンダーを使う〜fullcalendar-rails   gemは最新の1 …

Rails3.2でdocxを作成

  途中経過 github.com/jawspeak/ruby-docx-templater これを試してみた まずローカル環境にgemをダウンロード [crayon-58d8b359e23 …