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

Back to archive index
shinonon shino****@jcom*****
2021年 3月 21日 (日) 23:30:45 JST


篠田です。

Groonga のうまい使い方についてアドバイスをいただきたいと思います。
以下長文となり恐縮ですが、よろしくお願いいたします。

Subject には記事と書きましたが、要するに E-Mail のことです。
E-Mail は Message-Id というヘッダにメール固有の ID が記載され、
In-Reply-To というヘッダにそのメールの参照元メールの Message-Id が記載さ
れています。(RFC によれば References というヘッダに全ての参照元メールの 
Message-Id が含まれているはずなのですが、メールソフトによって全てだった
り、数通までだったり、全く使われていなかったり運用がバラバラですし、そも
そも参照元メールがどれだけあるかしか分からないので、あまり有用ではありま
せん)

やりたいことは、「参照されることが多いメールの検索スコアをできるだけ簡単
に上げたい」です。

・メールA(msgid=<aaa @ zzz> irt=なし)
  ・メールB(msgid=<bbb @ zzz> irt=<aaa @ zzz>)
    ・メールC(msgid=<ccc @ zzz> irt=<bbb @ zzz>)
  ・メールD(msgid=<ddd @ zzz> irt=<aaa @ zzz>)

私が考えたのは、E-Mail テーブルに msgid とともに following というベクター
コラムを作り、

・メールA(msgid=<aaa @ zzz> fol=<bbb @ zzz>,<ccc @ zzz>,<ddd @ zzz>)
  ・メールB(msgid=<bbb @ zzz> fol=<ccc @ zzz>)
    ・メールC(msgid=<ccc @ zzz> fol=なし)
  ・メールD(msgid=<ddd @ zzz> fol=なし)

とインデックスを行い、検索時は vector_size(following) 関数を使えばスコア
を上げられると思いました。
ただこのやり方ですと、例えばメールCのインデックス時に、再帰的に検索して
メールA とメールB という他の記事の following コラムを更新しなければいけ
ませんし、例えばメールB が削除されることを考えるとメールA の fol を
<ddd @ zzz> のみにしなければならず、テーブル更新作業がとても煩雑になります。
ただ Message-Id と In-Reply-To ヘッダをインデックスするだけで、参照され
ることが多いメールのスコアを上げる方法を、Groonga のドキュメントを見なが
ら、動的カラム等を駆使して何とか実現する方法はないかとずっと考えています
が、ちっとも思いつきません。

何かいい方法はないでしょうか?(このような使い方は、Web掲示板やコミュニ
ケーションツールでよくある形式なので、私が考えつかない Groonga のうまい 
DB の作り方 or うまい select の使い方があるのではないかと思っています)
それともやっぱり、私が考えた following ベクターカラムを作る方法で、イン
デックス時・削除時に苦労するしかないのでしょうか?

何かしらアドバイスをいただけますと幸いです。
何卒よろしくお願いいたします。

-- 
篠田 敦
shino****@jcom*****



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