Ruby/groongaとActiveGroongaの新しいバージョンがリリースされました。
いつも通り、以下のコマンドでインストールできます。
% sudo gem install groonga
0.0.7は最新のgroonga0.1.4に対応しています。
groongaが正式リリース前なので、まだRuby/groongaユーザもあまり多くはありませんが、徐々に使われはじめています。例えば、えにしテックのスープカレー好きのdaraさんが作ったbuzztterでRuby/groongaが使われています。
daraさんからはRuby/groongaに対するパッチをいくつかもらったりもしたので、Ruby/groongaのコミッタになってもらいました。APIの相談にものってくれる頼もしいCTOです。
今回のリリースでも便利な機能が入っているので、いくつか紹介します。
groongaを使ってはてなのようなキーワードリンクをRubyで付与することができます。
グニャラくんのところではSennaを使っていますが、同様の機能をRuby/groongaにも取り込みました。
Ruby/groongaを使うと以下のように書けます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# -*- coding: utf-8 -*- require 'groonga' Groonga::Context.default_options = {:encoding => "utf-8"} Groonga::Database.create words = Groonga::PatriciaTrie.create(:key_type => "ShortText", :key_normalize => true) words.add('リンク') words.add('リンクの冒険') words.add('冒険') words.add('㍊') words.add('ガッ') words.add('MUTEKI') text = 'muTEkiなリンクの冒険はミリバールでガッ' tagged_text = words.tag_keys(text) do |record, word| "[#{word}(#{record.key})]" end puts tagged_text # => [muTEki(muteki)]な[リンクの冒険(リンクの冒険)]は # [ミリバール(ミリバール)]で[ガッ(ガッ)] |
groongaでは独自の構文のクエリから検索条件を指定することができます。buzztterで検索条件を指定するところでも使われています。例えば、以下のような構文があります。
もう少し詳しい説明はgroongaのチュートリアルに載っています。
ここまでは前のリリースでもできたところです。今回のリリースからはさらにスニペット(検索語周辺のテキスト)も簡単に生成できるようになりました。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# "description"カラムに「ruby」または「groonga」が入っているレコードを検索 query = "ruby OR groonga" records = table.select do |record| record["description"].match(query) end # 「ruby」または「groonga」が含まれる周辺のテキストを表示 tags = [["<", ">"]] records.each do |record| puts record["name"] snippet = records.expression.snippet(tags, :normalize => true) snippet.execute(record["description"]).each do |text| puts "===" puts record["description"] # => Rubyでgroonga使って全文検索 puts "---" puts text # => <Ruby>で<groonga>使って全文検索 end end |
どのようになるかはRuby/groongaのサンプルアプリケーションで試してみてください。ここの検索ボックスもクエリ文字列に対応しているので、「OR」や「-」を使ったクエリを使うことができます。
Ruby/groonga 0.0.7の新機能を紹介しました。
groongaの機能を手軽に使えるRuby/groongaを試してみてはいかがでしょうか。