Naoya Murakami
visio****@gmail*****
2016年 5月 6日 (金) 18:02:33 JST
村上です。 動的カラム機能すごくいいですね! ソースを読んで、rank()関数とドリルダウンでも動的カラム を作れるように挑戦したいと思います。 2016年5月6日 11:52 Kouhei Sutou <kou****@clear*****>: > 須藤です。 > > In <CANM+HhcjeYcFPO+w0Ujv_m10j9****@mail*****> > "[groonga-dev,04023] ドリルダウン結果の任意のkeyの順位を取得したい" on Fri, 29 Apr 2016 > 18:12:32 +0900, > Naoya Murakami <visio****@gmail*****> wrote: > > > Groongaでドリルダウン結果の任意のkeyの順位を取得できるようにしたいと > > 考えています。 > > > > たとえば、 > > > > _key, _nrecs > > 東京, 5000 > > 神奈川, 3000 > > 兵庫, 300 > > > > というドリルダウン結果がある場合、兵庫が3番目であることを知りたいです。 > > > > 数が少ない場合は全部だせばいいのですが、1万件とかになると全部 > > 吐き出すのはやりたくないです。 > > > > そこで、以下のような実装案を考えてみました。 > > > > 1. グループ結果に順位を割り当てる > > --drilldown[label].calc_type RANK > > > > 2. ドリルダウン結果をfilterする > > --drilldown[label].filter '_key == "タグA"' > > > > RANKをわざわざ割り当てるのは、filter後でもグループ結果時点の順位を > > 得るためです。 > > (filterしない場合は_idでランクはわかりますが、filterすると変わるので。) > > なるほど。いわゆるウィンドウ関数が欲しいということですね。 > > ウィンドウ関数をcalc_typeで実現するのはキビシイです。というのは、 > calc_typeを計算するときは前後のレコードの情報を知らないからです。RANK > を実現するためには、該当レコードが何番目か?という情報が必要ですが、前 > 後のレコードの情報を知らないとソートできないので計算できないのです。ま > た、_nsubrecsでソートするためにはドリルダウンがすべて終わっている必要 > がありますが、calc_typeはドリルダウンしながら計算するのでこの時点では > 必要な情報が足りません。 > > ということで、別のアプローチが必要になります。 > > masterに https://github.com/groonga/groonga/issues/461 で説明している > 動的カラム作成機能を入れました。これと同じような感じで、 > > --drilldown[label].column[rank].stage initial \ > --drilldown[label].column[rank].type UInt32 \ > --drilldown[label].column[rank].flags COLUMN_SCALAR \ > --drilldown[label].column[rank].value 'rank()' \ > --drilldown[label].column[rank].sortby _nsubrecs > > とできるようにするのはどうかなぁと思いました。 > > で、ここで定義したrankはoutput_columnsで使えます。 > > --drilldown[label].output_columns '_key, _nsubrecs, rank' > > ーーdrilldown[label].filterはよいと思います。 > > > -- > 須藤 功平 <kou****@clear*****> > 株式会社クリアコード <http://www.clear-code.com/> > > Groongaベースの全文検索システムを総合サポート: > http://groonga.org/ja/support/ > パッチ採用 - プログラミングが楽しい人向けの採用プロセス: > http://www.clear-code.com/recruitment/ > リーダブルコードワークショップ: > > http://www.clear-code.com/services/code-reader/readable-code-workshop.html > > _______________________________________________ > groonga-dev mailing list > groon****@lists***** > http://lists.osdn.me/mailman/listinfo/groonga-dev > -------------- next part -------------- HTML$B$NE:IU%U%!%$%k$rJ]4I$7$^$7$?(B...Download