ongaeshi
ongae****@gmail*****
2014年 1月 9日 (木) 14:02:01 JST
おんがえしです。 ありがとうございます、試してみます! 2014年1月9日 11:29 Kouhei Sutou <kou****@clear*****>: > 須藤です。 > > In <CA+vpKiqQL=XNwzZX6b_CjtaU****@mail*****> > "[groonga-dev,02039] [rroonga] Groonga::Table#paginate の結果から参照元のレコードのidを取得したい" on Thu, 9 Jan 2014 01:49:31 +0900, > ongaeshi <ongae****@gmail*****> wrote: > >> ある Groonga::Array を生成した際、Groonga::Table#select の結果から実レコードのidを取得したい時は >> >> results = array.select("aaa") # 検索 >> record = results.first # 検索結果からレコードを取得 >> id = record.key.id # 実レコードのidを取得 >> >> で取得出来ますが、 Groonga::Table#paginate の結果からは取得出来ないようです。 >> >> results = array.select("aaa") # 検索 >> results.paginate( # さらにページネーション処理 >> [["_score", :desc]], >> :page => 1) >> record = results.first # ページネーション結果からレコードを取得 >> id = record.key.key.id # エラー、record.key の結果が nil になる >> >> paginateの結果から実レコードのidを取得することは可能でしょうか? > > 可能です! > > record.value.key.idでいけます! > ^^^^^ > keyじゃなくvalue > > 検索結果は順番が関係ないので一時Groonga::Hashで返すのですが、 > paginateは順番が関係あるので一時Groonga::Arrayで結果を返すの > です。Groonga::Hashにはキーがあるので、そこに実レコードのIDが > 入っているのですが、Groonga::Arrayにはキーがないので、valueの > ところに実レコードのIDが入っています。 > > 検索結果に対してのrecord.keyは > > 検索結果の一時Groonga::Hashのキーに入っている実レコードの > IDを取得してGroonga::Recordオブジェクトを返す > > ということをしています。 > > 一方、paginateの結果に対してのrecord.valueは > > paginate結果の一時Groonga::Arrayのvalueに入っている実レコー > ドのIDを取得してGroonga::Recordオブジェクトを返す > > というようになります。 > > > ちなみに、sortも同じようにGroonga::Arrayを返すのでrecord.key > ではなくrecord.valueになります。 > > -- > 須藤 功平 <kou****@clear*****> > 株式会社クリアコード <http://www.clear-code.com/> (03-6231-7270) > > Groongaサポート: > http://groonga.org/ja/support/ > パッチ採用はじめました: > http://www.clear-code.com/recruitment/ > コミットへのコメントサービスはじめました: > http://www.clear-code.com/services/commit-comment.html > > _______________________________________________ > groonga-dev mailing list > groon****@lists***** > http://lists.sourceforge.jp/mailman/listinfo/groonga-dev -- /****************************************** ongaeshi MAIL: ongae****@gmail***** WEB: http://ongaeshi.me Twitter: http://twitter.com/ongaeshi ******************************************/