私は映画の推奨エンジンで働いており、DB 設計の問題に直面しています。私の実際のデータベースは次のようになります。
MOVIES [ID,TITLE]
KEYWORDS_TABLE [ID,KEY_ID]
- ここで、ID は MOVIES.id の外部キー、KEY_ID はテキスト キーワード テーブルのキーです。
これはDB全体ではありませんが、私の問題にとって何が重要かをここに示しました. 私は約 50,000 本の映画と約 130 万のキーワード相関を持っています。基本的に私のアルゴリズムは、特定の映画と同じキーワードを持つすべての人を抽出し、キーワード相関の数で並べ替えることで構成されています。
たとえば、「Cast away」に似た映画を探したところ、キーワードの相関関係が最も多かった (4 つのキーワード) ため、「Six days and six nights」が返されました。
Island
Airplane crash
Stranded
Pilot
アルゴリズムはさらに多くの要因に基づいていますが、これはアプローチにとって最も重要であり、最も難しいものです。
基本的に私が今やっていることは、与えられた映画に似たキーワードを少なくとも 1 つ持つすべての映画を取得し、しばらくの間重要ではない他の要因によってそれらを並べ替えることです。
それほど多くのレコードがなくても問題はありません。多くの場合、クエリは最大 10 ~ 20 秒続き、そのうちのいくつかは 5000 以上のムービーを返します。ここで誰かがクエリの最適化を手伝ってくれましたが(Mark Byersに感謝)、時間がかかりすぎるため、それだけでは十分ではありません
SELECT DISTINCT M.title
FROM keywords_table K1
JOIN keywords_table K2
ON K2.key_id = K1.key_id
JOIN movies M
ON K2.id = M.id
WHERE K1.id = 4
だから、各映画の映画の推奨事項を含むリストを事前に作成した方がよいと思いましたが、テーブルをどのように設計すればよいかわかりません..それは良い考えですか、それともどのようにこのアプローチを取りますか?