[groonga-dev,02046] Re: [rroonga] Groonga::Table#paginate の結果から参照元のレコードのidを取得したい

Back to archive index

ongaeshi ongae****@gmail*****
2014年 1月 10日 (金) 00:28:42 JST


record.value.key.id で上手くいきました!ありがとうございます。

ここからは要望なのですが、Record#valueの値が非nilの時は
Record#attributesに内容を表示するようにしてもらえないでしょうか?

selectの結果を"p record.attributes"すると、
以下のようにkeyにRecordの値が格納されているであろうことが何となく分かります。

{"_id"=>2, "_key"=>{"_id"=>6, "filename"=>"xxxx", "suffix"=>nil,
"text"=>"xxxxx", "timestamp"=>2014-01-02 14:19:51 +0900}, "_score"=>1}

一方、paginateの結果を"p record.attributes"すると以下のように表示されます。

{"_id"=>1, "_score"=>23}

valueの値もattributesの結果に含まれれば、Rroongaの内部構造を知らなくても
何となく record.value.key.id で実レコードのidを取れる事が分かるようになるのではないかと思います。


2014年1月9日 14:02 ongaeshi <ongae****@gmail*****>:
> おんがえしです。
>
> ありがとうございます、試してみます!
>
> 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
>  ******************************************/



-- 
/******************************************
 ongaeshi
 MAIL:   ongae****@gmail*****
 WEB:   http://ongaeshi.me
 Twitter: http://twitter.com/ongaeshi
 ******************************************/




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