[groonga-dev,04592] Re: rroonga における drilldown について

Back to archive index

t. Kad pute.****@gmail*****
2018年 2月 16日 (金) 16:40:22 JST


pute です。
すみません、勘違いしていました!

groonga でも検索結果はグループごとに分割されないんですよね。
ruby の group_by みたいなのが欲しいなあと思っていたのですが、その話と混線して
「groonga の drilldown は group_by 相当のことをしてくれる」と
頭の中で勝手な思い込みができていました。
申し訳ありません。


2018年2月16日 16:28 t. Kad <pute.****@gmail*****>:
> pute です。
> 分かりづらくて申し訳ありません……。
> こんな感じの処理を行いたいと思っています。
>
> table_create --name users --flags TABLE_PAT_KEY --key_type ShortText
> column_create --table users --name first_name --type ShortText
> column_create --table users --name last_name --type ShortText
> column_create --table users --name sex --type ShortText
> load --table users --input_type json
> [
>   {"_key": "yurie",   "first_name": "ゆりえ", "last_name": "一橋", "sex": "女"},
>   {"_key": "mitsue",  "first_name": "光恵",   "last_name": "四条", "sex": "女"},
>   {"_key": "matsuri", "first_name": "祀",     "last_name": "三枝", "sex": "女"},
>   {"_key": "miko",    "first_name": "みこ",   "last_name": "三枝", "sex": "女"},
>   {"_key": "kouun",   "first_name": "光雲",   "last_name": "三枝", "sex": "男"},
> ]
>
> select users --query "last_name:三枝" --drilldown "sex" --output_pretty yes
> # result:
> # [
> #   [...],
> #   [
> #     # query で得られる結果: last_name == "三枝" の 3 レコード
> #     [ [3], [ ... ], [5, "kouun", "光雲", "三枝", "男"], [3, "matsuri",
> "祀", "三枝", "女"], [4, "miko", "みこ", "三枝", "女"] ],
> #     # drilldown で得られる結果: sex ごとの件数
> #     [ [2], [ ... ], ["男", 1], ["女", 2] ]
> #   ]
> # ]
>
> # たとえば↑の結果をこんな風に加工して使いたい
> #  男が1人
> #  三枝 光雲
> #  女が2人
> #  三枝 祀
> #  三枝 みこ
>
> # ruby でこんなふうに書きたい
> # io = StringIO.new
> # Groonga['users'].select('last_name:三枝').group('sex').each do |group|
> #   sex = group.key
> #   count = group.n_sub_records
> #   io.puts "#{sex}が#{count}人"
> #   group.sub_records.each do |record|
> #     first_name = record.first_name
> #     last_name = record.last_name
> #     io.puts "#{last_name} #{first_name}"
> #   end
> # end
>
> # 今のところこんな書き方をしている
> # io = StringIO.new
> # family = Groonga['users'].select('last_name:三枝')
> # family.group('sex').each do |group|
> #   sex = group.key
> #   count = group.n_sub_records
> #   io.puts "#{sex}が#{count}人"
> #   # ここでまた検索をしている
> #   family.select("sex:#{sex}").each do |record|
> #     first_name = record.first_name
> #     last_name = record.last_name
> #     io.puts "#{last_name} #{first_name}"
> #   end
> # end
>
> 2018年2月16日 15:18 Kouhei Sutou <kou****@clear*****>:
>> 須藤です。
>>
>> In <CADz=syM_injfw****@mail*****>
>>   "[groonga-dev,04589] Re: rroonga における drilldown について" on Fri, 16 Feb 2018 15:03:00 +0900,
>>   "t. Kad" <pute.****@gmail*****> wrote:
>>
>>> 須藤さんの仰った Record#key を使用する方法ですが、
>>> ここからレコードを一件ずつ処理するためには、
>>> そのキーで再度テーブルを検索する必要がありますよね?(なにか勘違いしていたらすみません)
>>>
>>> 一方で、素の groonga では再検索の必要はなく、
>>> (--limit の指定によりますが)全レコードと集計結果を
>>> まとめてとってくることができます。
>>>
>>> rroonga でも groonga と同じように一度の検索で結果も集計も全部とってきたい、
>>> というのがやりたいことです。
>>>
>>> いかがでしょうか?
>>
>> 私が理解できていない気がするので、Groongaのコマンド
>> (table_createとかloadとかselect)で、こんな感じの結果が欲し
>> い!というのを作ってもらうことってできますか?
>> それがわかれば、Rroongaならこうやる、というのを示せると思い
>> ます。
>>
>>
>> --
>> 須藤 功平 <kou****@clear*****>
>> 株式会社クリアコード <http://www.clear-code.com/>
>>
>> Groongaベースの全文検索システムを総合サポート:
>>   http://groonga.org/ja/support/
>> パッチ採用 - プログラミングが楽しい人向けの採用プロセス:
>>   http://www.clear-code.com/recruitment/
>> OSS開発支援サービス:
>>   http://www.clear-code.com/blog/2016/6/27.html
>>
>> _______________________________________________
>> groonga-dev mailing list
>> groon****@lists*****
>> https://lists.osdn.me/mailman/listinfo/groonga-dev



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