Railsで使えるGem

全文検索エンジンGroongaをRubyから利用するライブラリのチュートリアルをやってみた〜rroonga

投稿日:

Groonga

groonga.org/ja/

Groongaのインストール

Mac OSX

rroongaをインストールする前にgroongaをインストールしておいた方がいいみたい.

トークナイザーとしてmecabを使いたいときは–with-mecabオプションをつける.

groonga.org/ja/docs/install/mac_os_x.html#id3

トークナイザーの一覧を見たいときには、コマンドラインでtokenizer_list

rroongaのインストール

ranguba.org/ja/
「全文検索エンジンgroongaを囲む夕べ #1」のRuby枠の資料公開

チュートリアルの開始

ranguba.org/rroonga/ja/file.tutorial.html

データベースの作成

  • ファイルが大量にできるので、どこかtempディレクトリを作成した方がいい.

データベースへの接続

なにかあって、いったんirbを終了した場合はデータベースに再接続する必要がある.

テーブルの作成

Groongaには4種類のテーブルがあり、ここではハッシュテーブルを作成する.

作成したテーブルには次のようにアクセスできる.

レコードの追加

カラムを作る前にレコード作成というと不思議な感じがするけど、ハッシュテーブルのキーを登録できる.

カラムの追加

change_tableメソッドにブロックを与える.
titleという名前のText型のデータを持つカラムを作成するには次のとおり.

titleカラムへのアクセスは次のとおり.

全文検索用のインデックスを作成する

全文検索用のテーブルを作成する

Groongaでは別テーブルを作ってそこに単語を収納するみたい.
こんどはパトリシアトライというタイプのテーブルを作成する.

Itemsテーブルにインデックスを設定する

titleカラムにインデックスを設定するのは次のとおり.

サンプルデータをいれてみる

全文検索してみる

selectを使って、Rubyという単語が含まれているか検索するには次のとおり.

record.key.keyというのは、recordのキーをたどってItemsのレコードを取得して、Itemsのレコードのkeyを取得している.
これは次のように表現すれば、自動的にkeyをたどってくれる.

関連するテーブル

UserがItemに関してCommentできるようなテーブルを作ってみる.

Usersテーブルの作成

Commentsテーブルの作成

参照にはreferenceを使い、別名を使うこともできる.
また、time型のカラムを作成することも可能.

Commentsテーブルのcontentにインデックスを作成

サンプルデータの挿入

ユーザーデータの登録

アイテムデータの登録

コメントデータの登録

メソッド化

サンプルデータをさらに追加

全文検索その2

Commentsテーブルのcontentを検索

これは同じ

返りレコードの操作1〜日付順に並べ替え

返りレコードの操作2〜グループ化

少し複雑な検索

検索インデックスはItems.titleとComments.contentに貼られているけど、Items.titleの方を10倍のスコアにして、Itemsのスコアはさらに参照しているComments.contentのスコアの合計で重み付けして並び替える.

情報

-Railsで使えるGem
-, ,

執筆者:

関連記事

RailsでECサイト構築2 注文してみる~spree

  前提 RailsでECサイト構築~spree さっきは日本に発送できなかったので、最小限の設定をして注文から入金・発送までの一連の流れをみてみる 目次1 設定2 注文してみる3 入金・発 …

Rails3.2でリアルタイムメッセージング~Private_pub、Faye

  Railsで簡単に非同期通信ができるPrivate_pubというgemを試した もともとrubyにはFayeという非同期通信ができるgemがあったが、簡単に安全な接続ができる実装を加えた …

no image

Rails4とPostreSQL9.3で全文検索〜pg_bigm

目次1 準備2 migration3  使い方 準備 エクステンションを導入しておく Ubuntu Server12.04でPostgreSQL9.3をつかう〜pg_bigmで全文検索 migrati …

no image

Carrierwaveでpdfのサムネイルを作成する

Rails3.2.8でテーブル並び替えのテストを作る~cucumberと正規表現

前提 Railsのテーブル並び替えを実装する Rails3.2.8で自動テスト環境を整える〜cucumber+spork+guard 目次1 作戦(ストラテジー)2 have_contentの正規表現 …