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
-, ,

執筆者:

関連記事

no image

Rails3.2でユーザー管理機能を追加2~Devise+AjaxDataTables

  前回 Rails3.2でユーザー管理機能を追加~Devise 参照 Railsでajaxなテーブルを使う~datatables   いままでAjaxでのデータ更新ができなかった …

simple_formからdatepickerを使うには~ui_datepicker-rails3

  github.com/kristianmandrup/ui_datepicker-rails3 目次1 Gemfile2 js3 css4 initializer5  使う6 できた G …

Rubyで静的ページをジェネレート〜middleman

静的ページのジェネレータとしてはjekyllやこれを使ったoctopressなどがメジャーなようで middlemanもそんな静的なページのメジャーなジェネレータの1つ middlemanの利点は次の …

SimpleCovのカバレッジをvimに表示させる~simplecov-vim

      github.com/nyarly/Simplecov-Vim 参照 Rails3でテストカバレッジを計測する~simplecov,thin 自分のgem上の …

RailsでECサイト構築6 固定ページを作る~spree

  ECサイトを作成するときには日本の法律にしたがって色々と表示しなければならない 表示しなければならないことについては次のページが詳しかった 本サイトについて 実際のECサイトをみれば実例 …