私の仕事には、いくつかのタイプの多面多面体テーブルがあります。単語を他の単語 (ngram) に関連付けるアプリと、ユーザーを他のユーザー (友達/フォロワー) に関連付けることができるデータベースがあります。
このデータとの関係を構築して、アプリケーションの推奨事項とユーザーの両方にとって有用な接続を見つける方法を知りたいです。
ノードを別のノードにリンクする外部キーを持つ次の単純化されたデータベース テーブルを取り上げます。
id | node1 | node2
--------------------
1 | 1 | 2
2 | 1 | 3
3 | 1 | 4
4 | 2 | 1
5 | 2 | 3
6 | 2 | 5
7 | 3 | 1
たとえば、上の表では、「1」が最も多くリンクされているため (2 & 3)、「1」が最も人気があることは明らかです。また、「2」は「1」と非常に多くの関係を共有している (そして「1」は「4」にリンクされている) ため、「2」を「4」にリンクする必要があることも明らかです。
したがって、たとえば、次のことがわかります。
- ノードを他のノードに接続するパス。
- 類似性に基づく有益な接続 (推奨事項)
- 関連する接続を共有するノードのグループ
関係の他の一般的な形式は、user <=> friends
または のようなものblog_post <=> tags
です。
フロントエンドで直接実行できる SQL クエリ、またはこのデータから関係を引き出すために毎晩実行できるマップ削減ジョブを探しています。