[groonga-dev,04841] Re: 参照されることが多い記事のスコアを上げたい

Back to archive index
shinonon shino****@jcom*****
2021年 3月 23日 (火) 14:53:36 JST


篠田です。

> ところで、ページランク的には直接参照されているものが重要だと
> 思うので、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*****



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