[groonga-dev,00402] Re: rroonga を使って、リモートの groonga を利用する方法について

Back to archive index

Kouhei Sutou kou****@clear*****
2010年 11月 16日 (火) 11:59:11 JST


須藤です。

In <23979****@nifty*****>
  "[groonga-dev,00401] rroonga を使って、リモートの groonga を利用する方法について" on Tue, 16 Nov 2010 11:10:28 +0900 (JST),
  yfa02****@nifty***** wrote:

> ローカルのPATH指定ではなく、リモートホスト名とポート番号を指定してrroonga
> を利用したいと考えております。

> 同じ事をファイルPATH指定でデータベースに接続するのではなく、
> ホスト名&ポート番号で接続したいのですが、わかりませんでした。

> 以下のように、Groonga::Contextを利用し、
> groonga_context = Groonga::Context.new(:encoding => :utf8)
> groonga_context.connect(:host => 'localhost', :port => 10041)
> 
> 以下のように直接クエリを投げて、受信することはできました。
> groonga_context.send("stats")
> groonga_context.receive
> 
> ただ、sendやrecieveを直接使うのではなく、
> いわゆるrroongaが提供する各種APIを利用したいと考えております。

そうですよね、したいですよね。。。
なのですが、現在はselectコマンド(*)のみを実験的にサポートし
ている段階です。

(*) http://groonga.org/docs/commands/select.html

Groonga::Context#selectというメソッドがあり、それを使うと以
下のように(Rubyの)Hashで引数を指定できます。

  groonga_context.select("users",
                         :match_columns => "name",
                         :query => "taro",
                         :limit => 10)

戻り値はGroonga::Context::SelectResultというRubyオブジェクト
になります。groongaから返ってくるときはJSONになっていますが、
それを内部で自動的にRubyのオブジェクトに変換しています。

  result = groonga_context.select("users", ...)
  p result.n_hits # => 29
  p result.records # => [{"_id" => 1, "name" => "taro yamada"},
                         {"_id" => 3, "name" => "taro suzuki"},
                         ...]
  p result.drill_down # => [{"age" => #<Groonga::Context::SelectResult::DrillDownResult>},
                            {"company" => #<Groonga::Context::SelectResult::DrillDownResult>},
                            ...]

ただ、同期APIしか提供していなかったり、このAPIで使いやすいの
かがいまいちピンと来ていないので、APIが変更される可能性は十
分にあります。もし、アイディアがあれば教えてもらえるとうれし
いです。


余談ですが、背景を少し説明しておきます。

現在、rroongaはローカルのデータベースを操作するAPIを提供して
います。これは
  https://github.com/groonga/groonga/blob/master/doc/ja/README
で言えばDB APIに相当するレイヤーのAPIになります。

一方、http://groonga.org/docs/commands.html に載っているコマ
ンドを利用するAPIは↑のREADMEで言えばQL APIに相当するレイヤー
のAPIになります。で、rroongaはこのQL APIのサポートがまだ弱い
です。今後よくしていきたいなぁとは思っていますが、まだ、具体
的なアクションまではいっていないのが現状です。


> リモートホストにあるgroongaに接続してrroongaを利用する
> 方法、サンプルコード、ヒントを教えて頂けると助かります。

rroongaのtest/test-context-select.rbに少し使用例があります。

-- 
須藤 功平 <kou****@clear*****>
株式会社クリアコード <http://www.clear-code.com/> (03-6231-7270)

プログラミングが好きなソフトウェア開発者を募集中:
  http://www.clear-code.com/recruitment/




groonga-dev メーリングリストの案内
Back to archive index