[ruby-list:50285] [ANN] Rroonga - 6.0.0 - 高速全文検索ライブラリー

From: Masafumi Yokoyama <yokoyama@...>
Date: 2016-03-08 00:09:14 UTC
List: ruby-list #50285
横山です。

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で楽しい全文検索を!

-- 
横山 昌史 <Masafumi Yokoyama>
E-mail: yokoyama@clear-code.com
株式会社クリアコード
〒170-0005 東京都豊島区南大塚3-29-9
Tel: 03-5927-9440
Web: http://www.clear-code.com/

In This Thread

Prev Next