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

執筆者:

関連記事

no image

Rails3でTwitter Bootstrapのサーチフォームを実装する~form_tag

目次1 git & gitolite2 仕組みを考える3 フィーチャの作成4 Viewの作成5 Controllerの作成6 Modelの作成7 テストが通らない!8 mergeして終わり g …

Rails3.2とBackbone.jsでサーバーサイドのページネーション

By: Haldane Martin – CC BY 2.0   前提 Rails3.2とBackbone.jsでサーバーサイドのフィルタリング Rails3.2とBackbon …

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

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

Rails3.2でコードのお作法を指摘してもらう~Rails Best Practices

コードのお作法を自動でチェックしてくれるrails_best_practiceを導入した

あとは、Railsのルートで[crayon- …

no image

RailsでRedisを使う例のメモ

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