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