私のウェブサイトは、タグ付けされ分類されたコンテンツを大量に提供しており、コンテンツをユーザーのニーズに合わせるための強力なアルゴリズムを作成しようとしています。ユーザーは最も興味のあるタグを選択することができ、それらのタグと一致するコンテンツがより優先されます。さらに、コンテンツを「高く評価」(優先度を上げる)することができ、時間の減衰によってコンテンツの優先度を下げることができます。したがって、最終的には、ユーザーは自分が興味を持っているものと一致し、他のユーザーにも人気のある比較的新しいコンテンツを見る必要があります。
現在のアルゴリズムは次のように機能します。
- テーブルからすべてのアイテムを引き出し
content
ます。各アイテムに1のスコアを割り当てます。 - 手順1で取得した配列に一致するものがあるかどうかを確認
content_tags
します。一致する場合は、そのアイテムのスコアに乗数を適用します。user_tags
content_likes
各アイテムのいいねの数を確認してください。この量に基づいて、別の乗数を適用します。- アイテムの時間減衰に基づいて3番目の要素を適用します。明らかに、古いアイテムは新しいアイテムよりも大きなペナルティを受けます。
- 合計スコアで並べ替えます。結果の配列には、最も関連性の高い項目が最初に含まれている必要があります。次に、この配列を20程度のアイテムに切り詰めて、ページに表示するだけです。
おそらくお分かりのように、これは遅いアルゴリズムであり、コンテンツのすべての部分をプルするためにクエリを実行する必要があるだけでなく、、、、およびをチェックするために別々のクエリを実行する必要content_tags
がuser_tags
ありcontent_likes
ます。クエリが多すぎます!
私の最初の質問は、これをすべて間違っているのかということだと思います。それ以外に、上記で要約したすべてを最適化する方法を考えられますか?アイテムとユーザーが関連するタグを持っていると仮定すると、アルゴリズム自体は非常にうまく機能します。しかし、私のcontent
テーブルが数万のアイテムに成長するとき、私は本当に混乱することになるのではないかと心配しています。
ご協力いただきありがとうございます!