[groonga-dev,03000] Re: in_values()の除外指定?

Back to archive index

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




groonga-dev メーリングリストの案内
Back to archive index