Kouhei Sutou
kou****@clear*****
2012年 12月 29日 (土) 10:35:08 JST
須藤です。 今日は今年最後の肉の日ですね! みなさん、今年はよい肉の日を過ごしたでしょうか? さて、全文検索エンジンgroongaのRubyバインディングである rroongaの新しいバージョン2.1.0をリリースしました! 同じく今日リリースされたgroonga 2.1.0と一緒に使います。 Web: http://ranguba.org/ja/#about-rroonga ○ rroongaとは rroongaはRubyらしい書き方でgroongaを操作できるライブラリです。 高速な全文検索機能をあなたのRubyアプリケーションにさくっと組 み込むことができます。 インストールも簡単で、gem installだけでインストールできます。 (groongaがインストールされていなければ自動でインストールし ます。) gem install rroonga Windowsでも簡単にインストールできます。 RubyInstaller(*1)を使っている場合は、↑のgem installでインス トールできます。 (*1) http://rubyinstaller.org/ 能楽堂(*2)を使っている場合は、すでに能楽堂にバンドルされてい るので能楽堂をインストールしたらすぐに使えます。 (ただし、今回のリリースではなく、もう少し古いリリースがバン ドルされています。能楽堂がバージョンアップするタイミングで rroongaもバージョンアップされるはず。。。!) (*2) http://www.artonx.org/data/nougakudo/jman.html インストールしたらチュートリアルをやってみてください。どうやっ て使うかがわかるはずです。 チュートリアル: http://ranguba.org/rroonga/ja/file.tutorial.html ○ 今回のリリースについて 今回のリリースには、後方互換性のない変更が含まれます。 今までGroonga::Table#sortメソッドは、組み込みクラスのArrayオブジェクト を返していましたが、今回のバージョンからはGroonga::Arrayのオブジェクト が返るように修正しました。 そのため、以前までのようにレコードからなるArrayオブジェクトを得るには、 次のコードのようにrecord.valueメソッドを使う必要があります。(recordは ある1つのGroonga::Recordオブジェクト) result_since_2_1_0 = table.sort(["sort_key"]) result_before_2_1_0 = result_since_2_1_0.collect do |record| record.value end ただ、レコードに対してカラム名のメソッドを呼ぶことで、元のレコードの該 当するカラムの値を取得できます。そのため、レコードそのものではなくレコー ドのあるカラムが持つ値がほしい場合は、record.valueメソッドは使わず recordに対してカラム名のメソッドを呼ぶことをおすすめします。(例えば、 あるrecordのkeyはrecord.value.keyで取得できますが、record.keyも同じ値を 返します。) 他、インデックスカラムをダンプするツールや、文字列を正規化するメソッド が実験的に追加されました。実験的なので、今後断りなく仕様が変わることが あります。ご使用の際はご留意ください。また、ブロックで条件を指定するこ とでレコードをまとめて削除する機能も追加されました。 ○インストール % sudo gem install rroonga ○チュートリアル irbを使ったrroongaのチュートリアルがあります。 http://ranguba.org/rroonga/ja/file.tutorial.html はじめての方はまずこちらを試してみてください。 2.0.7からの変更点は以下の通りです。 http://ranguba.org/rroonga/ja/file.news.html 2.1.0: 2012-12-27 ----------------- 改良 ^^^^ * groonga 2.1.0対応。 * ブロックを使ってまとめてレコードを削除できるようになった。 [groonga-dev,01138][ongaeshiさんが報告] * Groonga::Normalizer.normalizeを追加。(ただし実験的です)このメソッ ドは文字列を正規化します。 例) Groonga::Normalizer.normalize("AbC") # => "abc" 今はこのメソッドは空白を自動で削除しますが、カスタマイズ可能にする予定です。 * DoubleArrayTrie, PatriciaTrie, Hash, Schemaを使ってテーブルを作ると きに:normalizerオプションを指定可能にした。 * [table] 使用しているノーマライザーへのアクセサを追加。 * [table] キーが正規化可能かどうかをノーマライザーを使ってチェックするようにした。 * groonga-index-dumpコマンドを追加。(ただし実験的です) このツールはDBからインデックスの情報をダンプします。 ダンプされた情報は"インデックス名.dump"というファイルに保存され、この ファイルは"インデックス対象のテーブル名.index_インデックスカラム名"と いうディレクトリに保存されます。 例) $ cat index-dump.sdf table_create --name Video --flags TABLE_HASH_KEY --key_type UInt32 table_create --name Tag --flags TABLE_HASH_KEY --key_type ShortText column_create --table Video --name title --flags COLUMN_SCALAR --type ShortText column_create --table Video --name tags --flags COLUMN_VECTOR --type Tag column_create --table Tag --name index_tags --flags COLUMN_INDEX --type Video --source tags load --table Video [ {"_key":1,"title":"groonga Demo","tags":["IT","Server","groonga"]}, {"_key":2,"title":"Ultra Baseball","tags":["Sports","Baseball"]}, ] $ groonga --file index-dump.sdf -n index-dump.db $ groonga-index-dump --output-directory=path/to/index/ index-dump.db $ ls path/to/index/ Tag.index_tags $ ls path/to/index/Tag.index_tags Baseball.dump IT.dump Server.dump Sports.dump groonga.dump $ cat path/to/index/Tag.index_tags/groonga.dump index: Tag.index_tags\tterm: <groonga>\tdomain: Tag\trange: Video\thave_section: false\thave_weight: false\thave_position: false weight\tposition term_frequency\trecord 0 2 1 Video[1].tags * Groonga::IndexColumn#open_cursorにフラグに関するオプション (:with_section, :with_weight, :with_position)を追加。インデックス カラムを作るときにこれらオプションを指定していると、指定したオプショ ンをデフォルトで使用可能になります。 * [Snippet] 指定されたGroonga::Contextオブジェクトがデータベースと結 びついていないときにエラーメッセージを表示するようにした。 * [inspect] インデックスカラム関連のフラグ(WITH_SECTION, WITH_WEIGHT, WITH_POSITION)はインデックスカラムを表示するときにの み表示するようにした。 * [inspect] デフォルトのトークナイザーとノーマライザーの情報を表示するようにした。 * Groonga::QueryLoggerをサポートした。このクラスはクエリログのロガー です。詳しくはリファレンスマニュアルをご覧ください。 変更 ^^^^ * groonga-query-log-extractコマンドをgroonga-query-logというgemに移動 しました。groonga-query-log-extractコマンドを使うには次のコマンドを 実行してgroonga-query-logをインストールしてください。 $ gem install groonga-query-log * Groonga::Table#sortの返り値をArrayではなくGroonga::Arrayにした。 [GitHub: #8][Genki Takiuchiさんが報告] 注意: これは後方互換性のない変更です。元のレコードを使うにはrecordの 代わりにrecord.valueを使う必要があります。 感謝 ^^^^ * ongaeshiさん * Genki Takiuchiさん それでは、よいお年を! -- 須藤 功平 <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