Kouhei Sutou
kou****@clear*****
2014年 12月 3日 (水) 20:53:40 JST
須藤です。 In <20141****@jcom*****> "[groonga-dev,02998] Re: in_values()の除外指定?" on Tue, 02 Dec 2014 23:51:59 +0900, shinonon <shino****@jcom*****> wrote: > すみません。もう一つ聞きたいことがあるのですが、ドリルダウン結果をさらに > グルーピングしたいのですが、何かいい方法はありますでしょうか? > > まだ機能の実装はしていないのですが、Bkroonga でメール検索した後に from > でドリルダウンして、送信者ごとに絞り込みができるような機能を考えています。 > 現在のところメールのインデクシングは From ヘッダをそのまま格納しているの > で、例えば、 > shinonon <shino****@jcom*****> > 篠田 <shino****@jcom*****> > という 2つの From は、同じアドレスなのに別々にドリルダウンされてしまいま > す。これを回避するには、以下のような方法が考えられると思います。 > > 1. fromadrs という column を新たに作って、Fromアドレスだけを新たにイン > デクシングする。 > →今までインデクシングしたメールを総なめして、新 column を新たに > インデクシングし直さないといけない > 2. ドリルダウンした結果を自ら集計して、同じアドレスのものを自力でまと > める > →ドリルダウン結果が大量にある場合、自らの集計時間で Groonga の高 > 速性を殺してしまう可能性がある。しかも実際に使用したいドリルダ > ウン結果は多くてもトップ100くらいなのに、1件しかヒットしないド > リルダウン結果まで取得しなければならない。 > > これくらいしか方法はないでしょうか? > > # 現在は 3.の「別々にドリルダウンされてしまっても仕方ない」に傾きつつあ > る自分がいます。。。。。 こんな方法はどうでしょうか!? * Fromを入れるカラムをFromsテーブルの参照型にする * Fromsテーブルにはnameとaddressがある * FromsのaddressはAddressesテーブルの参照型にする スキーマでいうとこんな感じで、 table_create Addresses TABLE_PAT_KEY ShortText --normalizer NormalizerAuto table_create Froms TABLE_HASH_KEY ShortText column_create Froms name COLUMN_SCALAR ShortText column_create Froms address COLUMN_SCALAR Addresses table_create Messages TABLE_HASH_KEY ShortText column_create Messages from COLUMN_SCALAR Froms データはこんな感じに入れます。 load --table Froms [ { "_key": "shinonon <shino****@jcom*****>", "name": "shinonon", "address": "shino****@jcom*****" }, { "_key": "篠田 <shino****@jcom*****>", "name": "篠田", "address": "shino****@jcom*****" }, ] load --table Messages [ { "_key": "20141****@jcom*****", "from": "篠田 <shino****@jcom*****>" }, { "_key": "20141****@jcom*****", "from": "shinonon <shino****@jcom*****>" }, { "_key": "20141****@jcom*****", "from": "shinonon <shino****@jcom*****>" } ] これだと、次のようにドリルダウンすれば名前が違ってもメールア ドレスが同じなら同じFromとして扱えます。 select Messages --drilldown from.address # [ # [ # 0, # 1417607379.36804, # 0.00101399421691895 # ], # 3 # ] # [ # [ # 0, # 1417607379.3691, # 0.000558853149414062 # ], # [ # [ # [ # 3 # ], # [ # [ # "_id", # "UInt32" # ], # [ # "_key", # "ShortText" # ], # [ # "from", # "Froms" # ] # ], # [ # 1, # "20141****@jcom*****", # "篠田 <shino****@jcom*****>" # ], # [ # 2, # "20141****@jcom*****", # "shinonon <shino****@jcom*****>" # ], # [ # 3, # "20141****@jcom*****", # "shinonon <shino****@jcom*****>" # ] # ], # [ # [ # 1 # ], # [ # [ # "_key", # "ShortText" # ], # [ # "_nsubrecs", # "Int32" # ] # ], # [ # "shino****@jcom*****", # 3 # ] # ] # ] # ] スキーマを変えないといけないのが手間だと思いますが。。。 -- 須藤 功平 <kou****@clear*****> 株式会社クリアコード <http://www.clear-code.com/> Groongaベースの全文検索システムを総合サポート: http://groonga.org/ja/support/ パッチ採用 - プログラミングが楽しい人向けの採用プロセス: http://www.clear-code.com/recruitment/ 名著『リーダブルコード』を解説者と一緒に読み解こう: http://schoo.jp/class/1502