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

執筆者:

関連記事

Rails3で帳票印刷を試す~thinreports

By: ZZ Bottom – CC BY 2.0 目次1 Thinreports2 とりあえずサンプルを試してみた3 ソースを見てみる1~詳細画面4 ソースを見てみる2~一覧表 Thin …

Rails3.2でFacebook風インターフェイスでタグづけ〜acts-as-taggable-on+jquery.tokenInput

By: Mauquoy Token Company – CC BY 2.0 railscasts.com/episodes/258-token-fields?language=ja&#03

Rubyでウェブサイトを操作してリストをつくる〜mechanize

    By: JoshSemans   以前からRailscastsというRuby on Railsの動画サイトが好きでよく見ているのだが、380近く動画があって気にな …

Rails5でマテリアルデザイン~material_design_lite-sass

By: AnnaKika – CC BY 2.0 目次1 マテリアルデザイン2 gem3 scss & javascript4 Turbolinksに対応5 simple_form …

RubyでTwitter〜twitter & t

By: Pete Simon – CC BY 2.0 目次1 はじめに2 twitter.gemのインストール3 Twitterアプリへの登録4 サンプルから試してみる5 cliでTwit …