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

Back to archive index

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


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