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

執筆者:

関連記事

Rails3.2でユーザー管理機能を追加~Devise

  前回 Rails3.2のアプリにユーザー機能を追加する~Devise サインアップ機能を削除したので、Railsからのユーザー管理機能を追加した 目次1 generate2 routes …

Rails3.2のproduction環境で動画再生~flowplayer+carrierwave+nginx+unicorn

  By: Creative Tools – CC BY 2.0 目次1 前提2 unicornの設定3 nginxのインストール4 nginxの設定5 アセット関係6  ストリ …

Rails3.2からMongoDBを使ってアプリをつくってみる~mongoid

MongoDBはとても素直で扱いやすいということがわかってきたので、以前作成した郵便番号・住所の相互検索アプリをまたつくってみた 参照 MongoDBのチュートリアルをこなす KEN_ALL.CSVを …

Ubuntu ServerのGuardからGrowl for Windowsにネットワーク経由で通知する

github.com/guard/guard 普段はWindows7から仮想環境(VirtualBox)のUbuntu Server 12.04.1へputtyで接続して開発してます. Virtual …

no image

Rails3.2とBackbone.jsでToDoアプリを作ってみた~backbone-on-rails

  公式 backbonejs.org/ Backbone ドキュメント日本語訳 github.com/enja-oss/Backbone イントロダクション github.com/enja