Netflix,但更好

netflix,但更好

免责声明:本项目与Netflix无关,仅为技术实验。

超越Netflix:构建更智能的电影推荐系统

Netflix作为流媒体巨头,拥有超过2亿用户和17000多部电影及电视节目,其推荐系统功不可没。该系统基于用户观看历史、相似节目、用户趋势和热门剧集等数据进行推荐。但如果我们能以更简便的方式复制这一功能呢?

本项目旨在构建一个简易的电影推荐系统,包含直接搜索、基于向量的推荐引擎以及AI内容推荐功能。

技术选型

本应用基于Next.js、Tailwind CSS和shadcn UI构建。项目灵感源于Tejas Kumar的DataStax电影推荐系统演讲,技术选型则借鉴了Lee Robinson的库存项目。为确保性能,我们使用Next.js的服务器端渲染(SSR)功能及图像组件进行图像预渲染和积极预取。数据存储采用Neon Cloud PostgreSQL数据库,Vercel AI SDK用于嵌入式搜索,并使用Prisma作为ORM。

数据准备

我们使用Kaggle上的开源数据集,包含8000多部电影和电视节目(CSV格式),直接导入数据库。OMDb API用于获取海报图像和IMDb评分。演示CSV文件使用cast作为列名,但在数据库中,我们使用_cast避免与数据库函数冲突。

COPY tmp_titles (show_id, title, description, director, genres, _cast, production_country, release_date, rating, duration)FROM '/data/netflix_titles.csv'DELIMITER ','CSV HEADER;

为建立表间关系,我们创建了多个表,shows表作为主要数据来源:

CREATE TABLE "shows" (    "id" SERIAL PRIMARY KEY NOT NULL,    "title" TEXT NOT NULL,    "poster" TEXT, -- 海报图片URL    "description" TEXT, -- 简短描述    "release_year" INTEGER, -- 发行年份    "duration" TEXT, -- 时长    "imdb_score" NUMERIC, -- IMDb评分    "imdb_id" TEXT, -- IMDb ID    "content_type" TEXT -- 类型 (电影或剧集));

接下来,创建actors表并建立与shows表的多对多关系:

CREATE TABLE "actors" (    "id" SERIAL PRIMARY KEY NOT NULL,    "name" TEXT NOT NULL,    CONSTRAINT "actors_name_unique" UNIQUE("name"));CREATE TABLE "show_actors" (    "show_id" INTEGER NOT NULL,    "actor_id" INTEGER NOT NULL,    CONSTRAINT "show_actors_show_id_actor_id_pk" PRIMARY KEY("show_id", "actor_id"));

这使得我们可以关联节目和演员。通过递归,可以将演员链接到他们出演的节目。这通过匹配tmp_titles表中的节目和shows表,并解析_cast列来实现。

-- 将tmp_titles._cast中的演员插入actors表WITH RECURSIVE split_cast AS (    SELECT DISTINCT -- 去除空格并以逗号分割_cast字符串        TRIM(UNNEST(STRING_TO_ARRAY(_cast, ','))) AS actor_name    FROM tmp_titles    WHERE _cast IS NOT NULL)INSERT INTO actors (name)SELECT actor_nameFROM split_castWHERE actor_name != '' -- 跳过空字符串ON CONFLICT (name) DO NOTHING;

类似过程应用于类别、导演和国家表。

全文搜索

为提升搜索功能,我们在shows表中添加search_text列,存储标题、描述、类型、演员、导演和类别的文本组合,方便全文搜索。我们使用PostgreSQL的pg_trgm扩展提高搜索效率。

-- 创建文本搜索扩展CREATE EXTENSION IF NOT EXISTS pg_trgm;-- 添加search_text列ALTER TABLE "shows"ADD COLUMN "search_text" TEXT;-- 创建search_text列索引CREATE INDEX "idx_shows_search_text_tsv" ON "shows" USING gin (to_tsvector('english', "search_text"));

迁移完成后,我们可以使用脚本填充search_text列:

// ... (代码片段,用于填充search_text列) ...

现在,我们可以使用search_text列执行全文搜索:

// ... (代码片段,用于执行全文搜索) ...

to_tsvectorto_tsquery函数用于匹配向量和查询。

Digram Digram

让Figma更好用的AI神器

Digram 67 查看详情 Digram

基于AI嵌入的向量搜索

全文搜索功能强大,但不足以满足所有需求。我们需要支持语义搜索,用户可以根据给定标题或抽象标准查找相似节目。

Vercel AI SDK可以创建元数据的向量表示(嵌入),增强语义搜索。我们使用Mistral模型:

// ... (代码片段,使用Mistral模型生成嵌入) ...

我们定义Zod模式用于AI生成嵌入:

// ... (代码片段,定义Zod模式) ...

使用该模式,我们可以要求AI模型分析节目信息并生成元数据:

// ... (代码片段,生成元数据) ...

结果类似于《绝命毒师》的元数据:

// ... (《绝命毒师》的元数据JSON) ...

使用此元数据,我们在shows表中存储每个节目的嵌入,启用向量搜索。创建必要的扩展并添加新列:

-- 创建扩展CREATE EXTENSION IF NOT EXISTS vector;-- 添加embedding列ALTER TABLE "shows"ADD COLUMN "embedding" vector(1024);-- 创建embedding列索引CREATE INDEX "embeddingindex" ON "shows" USING ivfflat ("embedding" vector_cosine_ops);

然后,使用AI SDK生成并存储嵌入:

// ... (代码片段,生成并存储嵌入) ...

现在,我们可以查询最近邻:

// ... (代码片段,查询最近邻) ...

未来展望

您可以克隆项目仓库并在本地运行。实时演示链接(此处应插入链接)。您可以添加新功能,例如新的推荐类型或使用OpenAI或Gemini改进搜索。还可以扩展数据集,添加更多元数据。

总结

通过PostgreSQL、Next.js和AI驱动的嵌入,我们可以构建高效可扩展的推荐引擎。全文搜索和语义AI搜索相结合,提供更强大、个性化的体验。

参考链接

pgvectorpg_trgmPrismaVercel AI SDKPostgreSQL中的向量搜索向量与Prisma的相似性

以上就是Netflix,但更好的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/779051.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月26日 09:00:26
下一篇 2025年11月26日 09:00:48

相关推荐

  • AI与Web3结合:智能合约市场规模突破千亿,币价狂飙

    近期,人工智能(AI)与Web3技术的深度融合正以前所未有的力量推动市场变革。得益于此,全球智能合约平台的总市场规模已正式突破千亿,相关数字资产价格也随之大幅上扬,标志着一个全新技术周期的开启。 一、市场规模与核心数据 1、根据最新行业数据报告,全球支持智能合约的区块链平台总市值已成功突破千亿美元大…

    2025年12月9日
    000
  • AI与Meme币轮动上涨,市场热点快速切换

    近期,加密货币市场呈现出一种引人注目的动态:人工智能(ai)相关代币与模因币(meme coin)之间出现了显著的轮动上涨现象。市场热点仿佛一个快速旋转的万花筒,资金在两类看似截然不同的资产类别间迅速切换,这不仅考验着投资者的反应速度,更深刻地反映了当前市场情绪、资金流向和叙事驱动的本质。 AI与M…

    2025年12月9日
    000
  • 全球十大货币交易app下载(2025官方最新版)

    在数字货币交易日益普及的今天,选择一款安全、便捷、功能强大的交易应用程序至关重要。本文将为您介绍2025官方最新版的全球十大货币交易app下载,帮助您在琳琅满目的选择中找到最适合自己的平台。这些应用不仅提供了丰富的交易对和多样化的投资产品,更在用户体验、安全保障和技术创新方面表现出色,助力您在数字货…

    2025年12月9日 好文分享
    000
  • 全球货币交易平台最新排行榜排名前十2025

    在全球金融市场日新月异的格局中,数字货币交易平台扮演着越来越重要的角色。这些平台不仅为投资者提供了交易的场所,更是连接全球资本流动的重要枢纽。2025年,随着技术的不断进步和市场需求的持续增长,全球货币交易平台呈现出新的发展态势。以下是根据最新数据整理出的全球货币交易平台排行榜前十名,旨在为广大用户…

    2025年12月9日 好文分享
    000
  • 十大全球货币交易app排行榜top10

    在全球数字货币交易日益活跃的今天,选择一款安全、高效、功能全面的交易应用程序至关重要。这些应用程序不仅是用户进行买卖交易的平台,更是获取市场信息、管理数字资产的重要工具。用户在选择时,通常会考量交易深度、币种丰富度、用户界面友好度、安全措施以及客户服务等多个维度。以下将对当前市场上备受推崇的十大全球…

    2025年12月9日 好文分享
    000
  • 六大AI开启炒币竞赛:国产 AI 竟遥遥领先?

    加密货币世界,人类交易者常常被情绪和信息不对称所困扰,但如果让 ai 模型来操盘,会发生什么? Binance币安 欧易OKX ️ Huobi火币️ 10 月 18 日,一个名为 Nof1 的项目将多个 AI 模型:GPT-5、Claude Sonnet 4.5、Gemini 2.5 Pro、Dee…

    2025年12月9日 好文分享
    000
  • Bitget交易所官方下载入口|2025安卓苹果双端APP获取

    Binance币安 欧易OKX ️ Huobi火币️ Bitget 交易所官方应用支持安卓和苹果双端,用户可通过其官网或指定渠道安全下载最新版本APP。为保障账户与资金安全,务必确认来源为官方网站,避免通过第三方链接下载,以防遭遇仿冒平台或恶意软件。 官方下载方式 进入 Bitget 官网是获取正版…

    2025年12月9日
    500
  • 隐私币板块异动,Zcash逆势大涨显示市场分化

    隐私币板块异动,Zcash逆势大涨显示市场分化 近期,加密货币市场整体呈现震荡调整格局,多数主流数字货币价格承压下行。然而,在这一片低迷之中,隐私币板块却出现了显著异动,其中zcash(zec)的表现尤为抢眼,逆势大幅上涨,单日涨幅一度超过20%,引发了市场广泛关注。这一现象不仅凸显了隐私币赛道的独…

    2025年12月9日
    000
  • 交易所爆仓事件:风险管理与教训

    主流货币交易所推荐: 欧易OKX: Binance币安: 火币Huobi: Gateio芝麻开门: 加密货币市场以其惊心动魄的波动性而闻名,这种波动性为投资者带来了巨大的机遇,也伴随着不可预测的风险。其中,“爆仓”无疑是投资者最不愿意面对的噩梦。它不仅仅是资金的损失,更是市场残酷性的一次直接体现。当…

    好文分享 2025年12月9日
    000
  • 全球十大货币交易平台2025官网正版

    数字货币交易平台在2025年持续吸引着全球投资者的目光,其便捷性、全球化特性以及潜在的高回报吸引了大量用户。这些平台不仅提供了加密资产的交易场所,更成为连接传统金融与去中心化金融的重要桥梁。选择一个安全、可靠且功能全面的交易平台至关重要,以下是根据市场表现、用户评价及平台功能整理出的2025年全球十…

    2025年12月9日 好文分享
    000
  • 交易所在极端行情下的表现与挑战

    在数字货币市场中,交易所扮演着至关重要的角色,它们是投资者进行加密资产交易的平台。然而,市场波动剧烈,特别是在极端行情下,交易所面临着前所未有的挑战。当市场经历暴跌或暴涨时,交易量激增、网络拥堵、系统稳定性等问题往往会集中爆发。这不仅考验着交易所的技术架构和运营能力,更直接关系到用户的资产安全和交易…

    好文分享 2025年12月9日
    000
  • 交易所的DEX聚合器:一站式交易体验

    主流货币交易所推荐: 欧易OKX: Binance币安: 火币Huobi: Gateio芝麻开门: 在数字货币交易的浩瀚宇宙中,DEX聚合器犹如一颗璀璨的星辰,正逐渐成为用户探索加密世界不可或缺的工具。它们不仅仅是简单的交易平台,更像是一个智能向导,帮助用户在去中心化交易所(DEX)的复杂生态系统中…

    好文分享 2025年12月9日
    000
  • 索拉拉(SOL)价格会不会因为中文名而迎来买盘? 走势与预测分析

    Binance币安 欧易OKX ️ Huobi火币️ 索拉拉(SOL)价格会不会因为中文名而迎来买盘? 索拉拉作为Solana的官方中文名,于2025年10月20日公布后,社区热议爆发,尤其在X平台上衍生Meme币讨论火爆,激发FOMO情绪,可能吸引中国投资者买盘。当前SOL价格约为$188.97 …

    2025年12月9日
    000
  • 币安人生在哪个平台可以买?币安App购买流程图解

    Binance币安 欧易OKX ️ Huobi火币️ 币安人生(BANL)可在哪些平台买入? 币安人生(BANL)是BNB链上热门Meme币,目前(2025年10月20日)价格约为$0.2672 USD,24小时交易量超$1.31亿美元。主要可在币安(Binance)交易所现货、Alpha区或期货市…

    2025年12月9日
    100
  • SOL中文名“索拉拉”对 Solana 在中国/亚洲市场的意义 品牌本土化的加速器?

    Binance币安 欧易OKX ️ Huobi火币️ SOL中文名“索拉拉”对 Solana 在中国/亚洲市场的意义 Solana于2025年10月20日正式公布中文名“索拉拉”,这一社区驱动的命名举措标志着其对华语市场的战略倾斜。由用户@easytopredict提出,该名源于Solana发音与“…

    2025年12月9日
    000
  • 币安10月21日空投预告

    Binance币安 欧易OKX ️ Huobi火币️ (SIGMA)空投 创新DeFi协议,预计15:00开抢,BNB Chain第10期MVB项目+Cake打新,0.01U抄底价!80%收入回购销毁的通缩王,预计230分左右、先到先得模式、空投少就算了,份数也少,消耗不动分数了呀币安大老爷! 另外…

    2025年12月9日
    000
  • 索拉拉是什么? Solana正式中文名“索拉拉”对华语投资者意味着什么?

    Binance币安 欧易OKX ️ Huobi火币️ 索拉拉是什么? 索拉拉是Solana区块链的官方中文名称,由Solana官方于2025年10月20日在X平台正式公布。该名称源于社区活动,由X用户@easytopredict(muper)提出,象征Solana上不断建设的创造者精神和创新活力。S…

    2025年12月9日
    000
  • 投资索拉拉还来得及吗? SOL 中文名背后的潜力与风险全解析

    Binance币安 欧易OKX ️ Huobi火币️ 投资索拉拉还来得及吗? 索拉拉主要指Solana(SOL)的官方中文名,目前(2025年10月20日)SOL价格约为$192.34 USD,24小时涨幅约+0.13%,市值约890亿美元。受中文名公告影响,SOL短期内有小幅回升潜力,但市场整体波…

    2025年12月9日
    000
  • 索拉拉会成为下一个 “主流山寨币王者”吗? Solana 相较于其他 Layer-1 的优势

    Binance币安 欧易OKX ️ Huobi火币️ 索拉拉会成为下一个“主流山寨币王者”吗? 索拉拉(Solana/SOL)作为高性能Layer-1区块链,已在2025年展现强劲势头,目前价格约为$192 USD,市值约890亿美元,位列altcoin前五。分析师普遍看好其成为“主流山寨币王者”的…

    2025年12月9日
    000
  • 在哪里可以买入索拉拉(SOL)? 新手必看购买渠道 + 注意事项

    Binance币安 欧易OKX ️ Huobi火币️ 在哪里可以买入索拉拉(SOL)? 索拉拉(SOL)是Solana区块链的原生代币,目前(2025年10月20日)价格约为$192 USD,可在多个主流加密货币交易所购买。新手推荐使用中心化交易所(CEX),支持信用卡、银行转账或P2P方式,操作简…

    2025年12月9日
    000

发表回复

登录后才能评论
关注微信