From: Masafumi Yokoyama Date: 2016-03-08T09:09:14+09:00 Subject: [ruby-list:50285] [ANN] Rroonga - 6.0.0 - 高速全文検索ライブラリー 横山です。 Rroonga 6.0.0をリリースしました。 約1年ぶりのメジャーバージョンアップです! ○ Rroonga(るるんが)とは Groonga(ぐるんが)という全文検索エンジンのRubyバインディング です。Rubyらしい書き方で、Groongaの高速な全文検索機能やカラム 指向のデータストア機能を使うことができます。 ライブラリーなのでサーバーをインストールする必要もありません。 全文検索が得意で日本語も扱えるSQLiteのようなイメージです。 Rroonga公式Webサイト: http://ranguba.org/ja/#about-rroonga Groonga公式Webサイト: http://groonga.org/ja/ インストールも簡単で、gem installだけでインストールできます。 ○ インストール gemコマンドでインストールできます。 % gem install rroonga 詳細: http://ranguba.org/rroonga/ja/file.install.html インストールに時間がかかる場合、事前にGroonga 6.0.0をインストール しておくと早くなります。手順は上記リンク先を参照してください。 以下の記事も参考になると思います。 Rroongaを最速でインストールするには http://qiita.com/groonga/items/2bc6d3499abc5ed47a49 ○ チュートリアル irbを使ったRroongaのチュートリアルがあります。 http://ranguba.org/rroonga/ja/file.tutorial.html はじめての方はまずこちらを試してみてください。 ○ 関連ソフトウェア 〇〇 るりまサーチ るりまプロジェクトのドキュメントを検索するるりまサーチは Rroongaを使っています。 http://docs.ruby-lang.org/ja/search/ Rrooongaの使い方は↓が参考になるはずです。 https://github.com/clear-code/rurema-search/tree/master/lib/rurema_search ○○ Milkode 行指向のソースコード検索エンジンであるMilkodeはRroongaを使っ たシステムです。 http://milkode.ongaeshi.me/ Rrooongaの使い方は↓が参考になるはずです。 https://github.com/ongaeshi/milkode/tree/master/lib/milkode/database るびまの記事もあります。 Rubyist Magazine - Ruby でソースコード検索エンジンの作り方 ~Milkode の内部実装解説~ http://magazine.rubyist.net/?0046-Milkode ○ Ruby on Railsとの連携について Railsで全文検索機能を実現したいときは、Rroongaよりも Rroongaの親戚のMroonga(むるんが)かPGroonga(ぴーじーるんが) を使う方が簡単です。SQLで使えるのでActive Recordと相性がよい のです。 MroongaはMySQLに日本語全文検索機能を追加するモジュールで、 PGroongaはPostgreSQLに日本語全文検索機能を追加するモジュール です。MySQLもPostgreSQLも日本語全文検索に課題がありますが、 それを解消します。 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だけでなくこちらも使ってみてください。 ○ 今回のリリースについて 先月末のうるう肉の日にリリースされた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で楽しい全文検索を! -- 横山 昌史 E-mail: yokoyama@clear-code.com 株式会社クリアコード 〒170-0005 東京都豊島区南大塚3-29-9 Tel: 03-5927-9440 Web: http://www.clear-code.com/