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

位置情報通知の使いみちアイデアメモ

    ここまでHTML5とGoogle Mapsを使った位置情報通知を試してきたけど、その使いみちについてメモしておきたい 目次1 カレログ的なサービス2 宝探し的なイベント3 …

no image

RailsでRedisを使う例のメモ

最近よく見かけるようなのでメモ Redisって大量にメモリを積んでないとダメかと思ってたけど、思ったよりいろんな方面に用途がありそう(リンク先の情報はわたしは未検証です) Redisの基礎 (全14回 …

Rails3.2のアプリをデプロイ~apache+passenger+postgresql

  環境 ubuntu server 12.04 目次1 postgresql2 apache+passenger3 デプロイ準備 postgresql インストール 参照 Ubuntu s …

今度こそRails3.2からdocxを生成する

  前提 Rubyからdocxを生成する 前回、イキオイアマって自分でdocxを生成する簡単なライブラリを作ってしまった.(なんて車輪の再発明 今回はこれをRailsから利用してみる. 目次 …

ElasticSearchをRubyから使う~elasticsearch-ruby

By: Harry Rose – CC BY 2.0 目次1 gem elasticsearch-ruby2 環境3 インスタンス作成4 メソッド一覧5 情報取得6 ドキュメントの作成7 …