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からBackbone.jsとD3.jsを使う一例

目次1 Backbone.jsからD3.jsを使う2 RailsのネストしたURLでBackboneを使う Backbone.jsからD3.jsを使う d3.jsで力指向グラフを使って遊ぶ2のクラス構 …

no image

Rubyでffmpegのラッパーを使う~streamio-ffmpeg

  github.com/streamio/streamio-ffmpeg rubyでffmpegが扱える高機能ラッパー 導入 [crayon-5953b9c0a2cfb121953567/ …

no image

Railsで動画を管理する2 動画のサムネイルを作成する~CarrierWave + Flowplayer

  *とりあえず動いているけど、もっとましな方法があるとおもいます 前提 Railsで動画ファイルを管理する~CarrierWave Flowplayer 参考 Rubyでffmpegのラッ …

Rubyでdocxをいろいろ分析してみた

  目次1 解凍~minizip2 ファイルを開く~File.open3 全ファイルを解凍せずにzip内の必要なファイルだけを開く~zipruby4 置換~gsub5 xmlの操作~noko …

no image

Rails3.2+MongoDBでつくったアプリをheroku+mongoHQにアップしたよ

Stack Overflowはなんでも答えてくれる エラーメッセージをコピーしてググればたいていの答えはStack Overflowで出尽くしている 目次1 Gemfile2 herokuにアプリ作成 …