[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/