rroongaを使ってみたので簡単なDBの操作方法をまとめました

rroonga_re_thb21

最近rroongaの味見をする事になった。
初めて使うにあたって参考にしたのは公式(?)のチュートリアル

シンプルなところから初めていって、非常にわかりやすいチュートリアルだった。

で、今回これを参考にとりあえずtwitterのデータをインデックスしてみることにした。

その際、DB作成やテーブル作成、インデックス作成などなど基本的なメソッドをまとめたので(自分みたいなザコはこーゆーのがないとww)エントリーしてみる。

ちなみに、チュートリアルに載ってる中でも基本的なものばかりです。(*‘ω‘ *)

リファレンス→リファレンス・マニュアル

※ 右上のClass List や Method List をポチポチすると検索できるようです。

↑最初気が付かなくて下にスクロールしてリファレンス・マニュアルをポチって無限ループしそうになったw

rroongaを召喚する

irbで使う場合は

% irb –simple-prompt -rubygems -rgroonga

“-rgroonga”ですって。

requireする場合は、

require “groonga”

こっちは”groonga”ですって。

文字コードの宣言

Groonga::Context.default_options = {:encoding => :utf8}

宣言ていう言い方は正しいのでしょうか。。(;´Д`)

何はともあれ、これを言っておく。

DB、テーブルの作成とか

今回はめっちゃシンプルに twitterAPIがくれるjsonのidをテーブルのkeyに、text(tweet)をtextカラムに入れて、テキストカラムはインデックス作成をする。 っていうのをやってみる。

データベースの作成

Groonga::Database.create(:path => "./data/oreno_twitter.db")

テーブルの作成

Groonga::Schema.create_table("Tweets", :type => :hash)

カラムの追加

Groonga::Schema.change_table("Tweets") do |table|
   table.text("text")
end

ちなみに、テーブル作成とカラム定義を一発でやるときは↓こうだそうで

Groonga::Schema.create_table("Tweets" :type => :hash) do |table|
   table.text("tweet")
end

メモ:create_tableの引数 type のデフォルトは Array だそう。

全然関係ない話ですが、テーブルのArrayやHashの違いやその概念などはクリアコードさんのブログのこの記事を読んですごいわかりやすかったです。

インデックスカラムが入る語彙表のテーブルを作る

Groonga::Schema.create_table("Terms",
                              :type => :patricia_trie,
                              :normalizer => :NormalizerAuto,
                              :default_tokenizer => "TokenBigram")

なお、 :default_tokenizer をMecabにする場合は ”TokenMecab”

先日TokenMecabを指定してエラー出て頭抱えた時のエントリーはこちら

インデックスカラムの作成

Groonga::Schema.change_table("Terms") do |table|
   table.index("Tweets.text")
end

データをインサートしていく

作ったテーブルにtwitterのデータをInsertしていく。

練習ではテーブル作成までirbでやって以下からrubyスクリプトを組んだ。

DBを呼ぶ

Groonga::Database.open("./data/oreno_twitter.db")

テーブルの参照

tweets = Groonga["Tweets"]

テーブルにレコードを追加する(参考)

tweets.add("1234567", :text => "長野新幹線が石川県まで伸びるって!?")

このaddをloopでまわしていけばよいでしょうか。

検索してみる

一応ここも上記 Database.open してる前提(あたりまえだけど)

レコード数の確認

puts tweets.count

クエリ投げ(なんていうのが正しいのかなw)

srch_res = tweets.select{|record| record.text =~ "長野"}

検索結果を取り出す

srch_res.collect{ |record|
  puts record.key.key
  puts record.text
}

### 結果
12345567
長野新幹線が石川県まで伸びるって!?

まとめ

やっぱrubyという事もあってわかりやすくて使いやすいですね。

実際のパフォーマンス測定とかはこれから色々ためしていきたいと思います。

あとそういえばレコードの削除とかってどうんすんだろ・・って今思ったのでまた調べたいと思います。

ちなみにサンプルのtweetをlang: ja のものだけ寄せ集めて30万レコードくらいインデックスしてみたけど、全然問題なく使えてました。

そんな事より、gem twitterがいつの間にかバージョン5に上がってて、こちらも試して見てるところですがたくさんのメソッドが消えてて。。。。はい。おわり。

2013-12-21 | Posted in RubyNo Comments » 


関連記事

Comment





Comment



*