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