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/