篠田です。
> ところで、ページランク的には直接参照されているものが重要だと
> 思うので、In-Reply-Toで参照されているメールだけスコアが高く
> なるので十分じゃないかと思いました。
COLUMN_INDEX にこんな使い方があるんですね。これもまた目からウロコでし
た。先程の例を改造して以下のように使ってみました。
table_create Messageid TABLE_HASH_KEY ShortText
table_create Mail TABLE_HASH_KEY Int64
column_create Mail subject COLUMN_SCALAR ShortText
column_create Mail messageid COLUMN_SCALAR Messageid
column_create Mail inreplyto COLUMN_SCALAR Messageid
column_create Messageid referred_mails COLUMN_INDEX Mail inreplyto
load --table Mail
[
{"_key":1,"subject":"one","messageid":"<aaa @ zzz>","inreplyto":""},
{"_key":2,"subject":"one two","messageid":"<bbb @ zzz>","inreplyto":"<aaa @ zzz>"},
{"_key":3,"subject":"one two three","messageid":"<ccc @ zzz>","inreplyto":"<bbb @ zzz>"},
{"_key":4,"subject":"one two another","messageid":"<ddd @ zzz>","inreplyto":"<aaa @ zzz>"},
{"_key":5,"subject":"one two three another","messageid":"<eee @ zzz>","inreplyto":"<ddd @ zzz>"},
]
select Mail \
--query 'subject:@one' \
--scorer '_score+=messageid.referred_mails' \
--output_columns 'subject,_score,referred_mails'
# [[[5],
# [['subject', 'ShortText'], ['_score', 'Int32']],
# ['one', 5],
# ['one two', 2],
# ['one two three', 1],
# ['one two another', 2],
# ['one two three another', 1]]]]
いい感じです。
select Mail \
--query 'subject:@two' \
--scorer '_score+=messageid.referred_mails' \
--output_columns 'subject,_score,referred_mails'
# [[[4],
# [['subject', 'ShortText'], ['_score', 'Int32']],
# ['one two', 2],
# ['one two three', 1],
# ['one two another', 2],
# ['one two three another', 1]]]]
こちらもいい感じです。
ただ、メールを delete すると reindex をしないといい感じになりませんで
した。
> 篠田さんのケースはローカルのメーラーの検索だと思うので、
そうですね。ローカルのメーラーの検索なので、
・メールを受信したフォルダで index されて、メール整理して移動した先
のフォルダで再度 index される(最初の受信フォルダの index は delete)
ということが多々あるため、ノーメンテで容易にいい感じの結果が出せるメリッ
トはとても大きいですが、検索結果の信用性はどうしても落ちてしまいます。
follow カラムの更新コストが思った以上に高かったら、この方法を使いたい
と思います。
貴重なアドバイス、ありがとうございました。
P.S.
私は古い人間で POP3 受信したローカルのメールを高速全文検索するのに
groonga をとても活用させてもらっていますが(そのおかげで私が使ってい
るBecky!でもあと10年は戦えると思っています)、世の中は IMAP サーバが
主流(特にビジネスの世界)だと思います。ところが IMAP はサーバサイドで
メールを持っていて、サーバサイドでメールの検索を行うので、いまだに
grep がまかり通っていると思います。一応、巷でよく使われている
Dovecot(IMAP+POP3サーバ)では、Apache Solr を組み込むこともできるよう
ですが、なかなか設定が煩雑のようです。
IMAP サーバ+Groonga(Dovecot に Groonga を組み込むのか、Groonga を
バックエンドにした IMAP サーバを作るのか、分かりませんが)があればい
いのに、と何度か思ったことがあります。でも世の中は、そんな小手先の苦
労をするのならさっさと Gmail を使っちゃってるみたいですし、そんなこ
としてもあまり盛り上がらないんですかね。
--
篠田 敦
shino****@jcom*****