Masafumi Yokoyama
yokoy****@clear*****
2016年 3月 8日 (火) 08:41:23 JST
横山です。 Rroonga 6.0.0をリリースしました。 約1年ぶりのメジャーバージョンアップです! Web: http://ranguba.org/ja/#about-rroonga ○ Rroonga(るるんが)とは RubyからGroongaのDB API層の機能を使えるライブラリーです。 Groongaの速度をそのまま生かしつつ、Rubyらしく書けることを大事 にしています。 ○ インストール % gem install rroonga 詳細: http://ranguba.org/rroonga/ja/file.install.html ○ チュートリアル irbを使ったRroongaのチュートリアルがあります。 http://ranguba.org/rroonga/ja/file.tutorial.html はじめての方はまずこちらを試してみてください。 ○ 今回のリリースについて 先月末のうるう肉の日にリリースされたGroonga 6.0.0に対応しました。 Groonga 5.1.2以前はサポートしなくなったのでご注意ください。 このリリースでは多くの変更が入っています。 特にGroonga::Table#selectの動作がいろいろと改善されています。 例えば、RubyらしいAPIが追加されていたりします。 今までは以下のように呼んでいたのが、 # Rroonga 5.1.1以前(6.0.0でも使える) @shops.select do |record| record.call("geo_in_rectangle", record.location, "35.7185,139.7912", "35.7065,139.8069") end 以下のように呼べるようになります。 # Rroonga 6.0.0 @shops.select do |record| record.location.geo_in_rectangle("35.7185,139.7912", "35.7065,139.8069") end なお、一つ後方非互換な変更が入っています。 Groonga::Table#selectの条件ブロック内で数値オブジェクトを自動でレコード IDに変換することをやめました。 影響があるのは、以下のようにブロック内で数値型のキーを持つレコードオブ ジェクトを比較しているケースです。 Groonga::Schema.define do |schema| schema.create_table("Users", key_type: :integer) do |table| table.short_text("name") end schema.create_table("Records", type: :array) do |table| table.reference("user", "Users") end end users = Groonga["Users"] alice = users.add(2, name: "Alice") p alice.id # => 1 bob = users.add(1, name: "Bob") p bob.id # => 2 records = Groonga["Records"] records.add(user: alice) records.add(user: bob) selected_records = records.select do |record| record.user == 1 end p selected_records.collect {|record| record.user.name} # Rroonga 5.1.1は「1」がIDとして扱われるため ["Alice"] が返る # Rroonga 6.0.0は「1」がキーとして扱われるため ["Bob"] が返る 6.0.0で右辺値としてレコードIDを指定したい場合はレコードオブジェクトを渡 してください。 selected_records = records.select do |record| record.user == alice end 影響がある方はあまりいないとは思いますが、ご注意ください。 5.1.1からの変更点の詳細は以下の通りです。 http://ranguba.org/rroonga/ja/file.news.html#6-0-0 ○ Ruby on Railsとの連携について RroongaはRuby on Railsからでも使うことができます。 ただ、Railsで全文検索機能を実現したいときは、Rroongaよりも Mroonga(むるんが)かPGroonga(ぴーじーるんが)を使う方が簡単です。 SQLで使えるのでActive Recordと相性がよいからです。 Ruby on RailsでMySQLとMroongaを使って日本語全文検索を実現する方法: http://www.clear-code.com/blog/2015/11/10.html Ruby on RailsでPostgreSQLとPGroongaを使って日本語全文検索を実現する方法: http://www.clear-code.com/blog/2015/11/9.html Rroongaだけでなくこちらも使ってみてください。 それでは、RubyでもGroongaでガンガン全文検索してください! -- 横山 昌史 <Masafumi Yokoyama> E-mail: yokoy****@clear***** 株式会社クリアコード 〒170-0005 東京都豊島区南大塚3-29-9 Tel: 03-5927-9440 Web: http://www.clear-code.com/