こういうのを、インプロセスDBとも呼ぶようです。
さて、本題であるRroongaはこれをRubyの構文で扱えるようにしたgemです。
前準備
$ brew install groonga $ gem install rgoonga $ rbenv rehash
試す
$ irb --simple-prompt -rubygem -rgroonga
とやって、rgoongaを呼び出した状態でirbを起動します。
>> Groonga::Context.default_options ={:encoding => :utf8} => {:encoding=>:utf8}
データベースを作成します。
>> Groonga::Database.create(:path => '/tmp/bookmark.db') => #<Groonga::Database id: <nil>, name: (anonymous), path: </tmp/bookmark.db>, domain: (nil), range: (nil), flags: <>>
>> Groonga::Schema.create_table('items', :type => :hash) => [#<Groonga::Schema:: (略) @table_type=Groonga::Hash>]
itemsというカラムを作成
>> items = Groonga['items'] => #<Groonga::Hash id: <256>, (略) normalizer: (nil)> >> items.size => 0
itemsにデータを追加
>> items.add('as you like') => #<Groonga::Record:... >> items.add('who am i') => #<Groonga::Record:... >> items.size => 2
>> Groonga::Schema.change_table('items'){|table| table.text("title")} => [#<Groonga::Schema::TableDefinition:...
既存カラムにtitleという要素を追加
>> title = Groonga['items.title'] => #<Groonga::VariableSizeColumn ... >> items['as you like'].title ='ruby' => "ruby" >> items['who am i'].title ='python' => "python"
それではお楽しみの検索です。
Rubyらしく、Enumeratorが使えます。
>> items.add('uec') >> items['uec'].title ='ruby' >> ruby_items = items.select{|record| record.title =~ 'ruby'} >> ruby_items.collect{|record| record.key.key} => ["as you like", "uec"]