Kouhei Sutou
kou****@clear*****
2013年 7月 5日 (金) 12:33:53 JST
須藤です。 groongaのRubyバインディングであるrroonga 3.0.4をリリースしま した。 Web: http://ranguba.org/ja/#about-rroonga ○ rroongaとは rroongaはRubyらしい書き方でgroongaを操作できることを重視しています。 同時に、groongaの速度をそのまま生かすことも大事にしています。 ○ 今回のリリースについて 今回のリリースからgroonga 3.0.5で追加されたサブレコード機能 に対応しました。サブレコード機能とは、ドリルダウンしたあとの 各項目について、実際に集約したレコード(= サブレコード)を取 り出す機能です。 この機能を使うと、例えば、ジャンルでドリルダウンした結果のそ ばに具体的にどういうアイテムがあるかを表示することができます。 * 本(1238件) * Ruby(29件) ← ジャンル * たのしいRuby ← サブレコード! * 初めてのRuby ← サブレコード! * ... * Python(13件) ← ジャンル * ... * PHP(23件) ← ジャンル * ... コード例です。詳細はコメントを参考にしてください。 ---- require "fileutils" require "groonga" db_dir = "/tmp/db" FileUtils.rm_rf(db_dir) FileUtils.mkdir_p(db_dir) Groonga::Database.create(:path => "#{db_dir}/db") # ユーザーが複数のブックマークをする、というスキーマ。 Groonga::Schema.define do |schema| schema.create_table("Users", :type => :hash, :key_type => :short_text) do |table| table.short_text("name") end schema.create_table("Bookmarks") do |table| table.short_text("url") table.reference("user") end end # ユーザーを3人登録 users = Groonga["Users"] users.add("mori", :name => "Daijiro MORI") users.add("kou", :name => "Kouhei Sutou") users.add("s-yata", :name => "Susumu Yata") bookmarks = Groonga["Bookmarks"] # groonga.orgをブックマーク bookmarks.add(:url => "http://groonga.org/", :user => "mori") bookmarks.add(:url => "http://groonga.org/", :user => "kou") bookmarks.add(:url => "http://groonga.org/", :user => "s-yata") # mroonga.orgをブックマーク bookmarks.add(:url => "http://mroonga.org/", :user => "kou") # ranguba.orgをブックマーク bookmarks.add(:url => "http://ranguba.org/", :user => "kou") bookmarks.add(:url => "http://ranguba.org/", :user => "mori") # ブックマークをユーザーごとにグループ化 # 取得する最大サブレコード数は2 bookmarks.group("user", :max_n_sub_records => 2).each do |group| # グループ化した結果レコードから実際の値(ユーザー)を取得 user = group.key # ユーザーID(key)と全サブレコード数を出力。 # 全サブレコード数は:max_n_sub_records => 2の影響を受けない puts "#{user.key} (#{group.n_sub_records})" # グループ化したときに集約された各レコード(= サブレコード)の情報を出力 # ブックマークテーブルをグループ化したのでサブレコードはブックマークレコード # ただし、:max_n_sub_records => 2で最大で2件までに制限されている。 group.sub_records.each do |bookmark| puts " #{bookmark.url}" end end # 結果: # mori (2) # http://groonga.org/ # http://ranguba.org/ # kou (3) # http://groonga.org/ # http://mroonga.org/ # s-yata (1) # http://groonga.org/ # # kouユーザーは3サブレコードあるが、:max_n_sub_records => 2で # 最大2件に制限しているため2件しか表示されていない。 ---- ○ インストール % gem install rroonga ○ チュートリアル irbを使ったrroongaのチュートリアルがあります。 http://ranguba.org/rroonga/ja/file.tutorial.html はじめての方はまずこちらを試してみてください。 3.0.2からの変更点は以下の通りです。 http://ranguba.org/rroonga/ja/file.news.html#3-0-4 3.0.4: 2013-07-04 ================= 修正 ---- * Windows用のrroogna 3.0.3 gemパッケージを修正。 3.0.3: 2013-07-04 ================= 改善 ---- * groonga >= 3.0.5を必須とした。 * Groonga::Table#selectの結果テーブル作成時のエラーチェックを追加。 * Groonga::Operator::AND_NOTを追加。 * Groonga::Operator::BUTを非推奨にした。これはgroongaが非推奨にしたためである。 代わりにGroonga::Operator::AND_NOTを使うこと。 * Groonga::Array#unblockを追加。 * Groonga::Table#groupに :max_n_sub_records オプションを追加。 * Groonga::Table#each_sub_recordを追加。 * groongaからベクターの値を読み込めるようにした。 * Groonga::Expression#define_variableに :reference => true オプションを追加。 これは、参照型の変数を定義するためのものである。 * レコードのサブレコードを返すGroonga::Record#sub_recordsを追加。 サブレコードはGroonga::SubRecordsのインスタンスである。 修正 ---- * Groonga::Expression#[]の返り値の型を修正。値そのものではなくGroonga::Variableを返すようにした。注意: これは後方非互換の変更である。 -- 須藤 功平 <kou****@clear*****> 株式会社クリアコード <http://www.clear-code.com/> (03-6231-7270) groongaサポート: http://groonga.org/ja/support/ パッチ採用はじめました: http://www.clear-code.com/recruitment/ コミットへのコメントサービスはじめました: http://www.clear-code.com/services/commit-comment.html