精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

「從零搭建」用 SpringBoot + 向量搜索打造智能短視頻推薦系統!實時推薦爽到飛起

開發 前端
在短視頻內容爆炸的時代,如何讓用戶在海量視頻中快速看到“自己想看的內容”,成為推薦系統的核心問題。?傳統基于規則或協同過濾的推薦方式,已無法滿足實時性與語義理解需求。

在短視頻內容爆炸的時代,如何讓用戶在海量視頻中快速看到“自己想看的內容”,成為推薦系統的核心問題。 傳統基于規則或協同過濾的推薦方式,已無法滿足實時性與語義理解需求。

于是,向量搜索(Vector Search) 結合深度語義向量嵌入(Embedding)成為主流解決方案。 本文將通過 Spring Boot + Milvus/PGVector + OpenAI Embedding + Thymeleaf + Bootstrap,構建一個可落地的短視頻語義推薦系統,實現以下目標:

  • 視頻元數據存儲與語義向量嵌入;
  • 用戶輸入搜索語句時,自動生成向量并進行相似度檢索;
  • 實時返回語義最相近的短視頻內容;
  • 前端動態展示推薦結果。

項目結構設計

springboot-vector-recommend/
├── src/
│   ├── main/
│   │   ├── java/com/icoderoad/recommend/
│   │   │   ├── controller/
│   │   │   │   └── VideoController.java
│   │   │   ├── service/
│   │   │   │   └── VideoService.java
│   │   │   ├── model/
│   │   │   │   └── Video.java
│   │   │   └── util/
│   │   │       └── EmbeddingUtil.java
│   │   ├── resources/
│   │   │   ├── templates/
│   │   │   │   └── recommend.html
│   │   │   └── application.yml
├── pom.xml

依賴配置(pom.xml)

<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.icoderoad</groupId>
    <artifactId>springboot-vector-recommend</artifactId>
    <version>1.0.0</version>


    <dependencies>
        <!-- Spring Boot 基礎依賴 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>


        <!-- Thymeleaf 模板引擎 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>


        <!-- PostgreSQL + pgvector 支持 -->
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
        </dependency>


        <!-- MyBatis-Plus -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.5</version>
        </dependency>


        <!-- OpenAI Embedding 工具 -->
        <dependency>
            <groupId>com.theokanning.openai-gpt3-java</groupId>
            <artifactId>client</artifactId>
            <version>0.17.1</version>
        </dependency>


        <!-- Fastjson 解析工具 -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>2.0.34</version>
        </dependency>
    </dependencies>
</project>

application.yml 配置

server:
  port: 8080


spring:
  datasource:
    url: jdbc:postgresql://localhost:5432/video_recommend
    username: postgres
    password: 123456
    driver-class-name: org.postgresql.Driver


openai:
  api-key: sk-xxxxxx  # 替換為你自己的OpenAI密鑰

數據庫表結構(pgvector)

執行 SQL:

CREATE EXTENSION IF NOT EXISTS vector;


CREATE TABLE video (
  id SERIAL PRIMARY KEY,
  title VARCHAR(255),
  description TEXT,
  url VARCHAR(255),
  embedding vector(1536)  -- 存儲 OpenAI Embedding 向量
);

Embedding 工具類

package com.icoderoad.recommend.util;


import com.theokanning.openai.embedding.EmbeddingRequest;
import com.theokanning.openai.embedding.EmbeddingResult;
import com.theokanning.openai.service.OpenAiService;
import java.util.List;


public class EmbeddingUtil {
    private static final String MODEL = "text-embedding-3-small";
    private static final OpenAiService service = new OpenAiService(System.getenv("OPENAI_API_KEY"));


    // 生成文本向量
    public static List<Float> getEmbedding(String text) {
        EmbeddingRequest request = EmbeddingRequest.builder()
                .input(List.of(text))
                .model(MODEL)
                .build();
        EmbeddingResult result = service.createEmbeddings(request);
        return result.getData().get(0).getEmbedding();
    }
}

后端推薦服務邏輯

package com.icoderoad.recommend.service;


import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.icoderoad.recommend.model.Video;
import com.icoderoad.recommend.util.EmbeddingUtil;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.util.List;


@Service
public class VideoService {


    @Resource
    private VideoMapper videoMapper;


    /**
     * 基于語義搜索的相似視頻推薦
     */
    public List<Video> recommendByText(String query) {
        List<Float> embedding = EmbeddingUtil.getEmbedding(query);
        String vectorString = embedding.toString().replace("[", "(").replace("]", ")");


        // 使用 PGVector 的相似度查詢(<-> 表示余弦距離)
        String sql = "SELECT * FROM video ORDER BY embedding <-> '" + vectorString + "' LIMIT 10";
        return videoMapper.selectBySql(sql);
    }
}

Controller 層接口

package com.icoderoad.recommend.controller;


import com.icoderoad.recommend.model.Video;
import com.icoderoad.recommend.service.VideoService;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;


import java.util.List;


@Controller
public class VideoController {


    private final VideoService videoService;


    public VideoController(VideoService videoService) {
        this.videoService = videoService;
    }


    @GetMapping("/")
    public String index() {
        return "recommend";
    }


    @PostMapping("/recommend")
    public String recommend(@RequestParam("query") String query, Model model) {
        List<Video> results = videoService.recommendByText(query);
        model.addAttribute("query", query);
        model.addAttribute("videos", results);
        return "recommend";
    }
}

前端展示部分

(Thymeleaf + Bootstrap 實現推薦結果列表頁)

文件:src/main/resources/templates/recommend.html

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org" lang="zh">
<head>
    <meta charset="UTF-8">
    <title>短視頻推薦系統</title>
    <link rel="stylesheet"
          >
    <style>
        body {
            background-color: #f8f9fa;
        }
        .video-card {
            border-radius: 12px;
            box-shadow: 0 2px 8px rgba(0,0,0,0.1);
            transition: transform 0.2s;
        }
        .video-card:hover {
            transform: scale(1.02);
        }
        .video-title {
            font-weight: 600;
            color: #333;
        }
        .video-desc {
            color: #666;
            font-size: 0.9rem;
        }
    </style>
</head>


<body>
<div class="container py-5">
    <div class="text-center mb-4">
        <h2 class="fw-bold">短視頻智能推薦系統</h2>
        <p class="text-muted">輸入關鍵詞,看看你會喜歡哪些視頻</p>
    </div>


    <!-- 搜索框 -->
    <form method="post" th:action="@{/recommend}" class="d-flex justify-content-center mb-5">
        <input type="text" name="query" class="form-control w-50 me-2" placeholder="輸入你的興趣,如 '旅行' 或 '美食'"
               th:value="${query}">
        <button class="btn btn-primary px-4" type="submit">推薦一下</button>
    </form>


    <!-- 推薦結果列表 -->
    <div class="row" th:if="${videos != null}">
        <div th:each="v : ${videos}" class="col-md-4 mb-4">
            <div class="card video-card">
                <iframe th:src="${v.url}" class="card-img-top" height="200" allowfullscreen></iframe>
                <div class="card-body">
                    <h5 class="video-title" th:text="${v.title}"></h5>
                    <p class="video-desc" th:text="${v.description}"></p>
                </div>
            </div>
        </div>
    </div>


    <div th:if="${videos == null}" class="text-center text-muted mt-5">
        <p>輸入關鍵詞后將顯示推薦結果</p>
    </div>
</div>


<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>

運行效果

  • 啟動 Spring Boot 服務:
mvn spring-boot:run
  • 訪問:http://localhost:8080
  • 在輸入框中輸入關鍵詞(如“音樂”、“健身”或“寵物”),點擊推薦按鈕;
  • 頁面將動態展示語義上相似的視頻列表,并通過 Bootstrap 卡片美觀呈現。

總結

通過本實戰,我們完成了一個從 語義理解 → 向量檢索 → 實時推薦 → 前端展示 的完整閉環系統。 它不僅適用于短視頻推薦場景,也可輕松擴展至:

  •  新聞/文章語義檢索
  •  音樂情緒推薦
  •  知識問答匹配

接下來你可以繼續優化:

  • 將向量存儲從 PostgreSQL 升級為 Milvus / Qdrant
  • 結合 ChatGPT Re-Ranker 提升結果精度;
  • 利用 Redis 緩存向量查詢結果 提高響應速度。
責任編輯:武曉燕 來源: 路條編程
相關推薦

2016-01-07 13:23:35

構建實時推薦系統

2025-08-27 08:23:49

2025-09-04 07:40:21

Spring視頻推流系統

2016-12-29 10:32:06

2016-12-29 10:42:30

零搭建概述標簽

2025-09-10 07:36:05

2010-01-25 13:42:04

Windows Emb

2025-08-15 07:36:48

彈幕系統Spring

2024-02-05 08:41:08

因果推斷快手短視頻應用

2021-03-22 08:29:59

Elasticsear搜索系統

2024-05-17 08:07:46

Spring廣告推薦系統

2022-03-31 11:18:00

數據運維短視頻

2022-08-08 07:03:08

推薦系統架構

2025-04-02 07:30:37

LLMDify應用

2024-08-05 09:18:21

2024-11-28 10:35:47

2025-02-24 13:46:40

2024-09-22 09:48:02

數據飛輪智能

2023-04-10 08:00:00

點贊
收藏

51CTO技術棧公眾號

日本成a人片在线观看| 一区二区视频在线免费观看| 精品视频高潮| 色综合av在线| 中文字幕久久综合| 亚洲精品福利网站| 丝袜亚洲另类丝袜在线| www亚洲欧美| 国产精品一区二区无码对白| 亚洲精品.com| 亚洲影院久久精品| 天堂资源在线亚洲视频| 亚洲精品97久久中文字幕无码| 一区二区激情| 欧美成人精品影院| 精品无人区无码乱码毛片国产 | av老司机久久| 国产亚洲一区在线| 美乳少妇欧美精品| 全黄一级裸体片| 2020最新国产精品| 欧美专区日韩专区| 欧美精品自拍视频| 成人区精品一区二区不卡| 久久精品一区二区三区不卡| 97视频热人人精品| 亚洲视屏在线观看| 国产视频一区欧美| 欧美国产激情18| 999福利视频| 国产在线日韩精品| 亚洲精品二三区| 古装做爰无遮挡三级聊斋艳谭| 成人天堂yy6080亚洲高清| 亚洲综合色噜噜狠狠| 亚洲欧美成人一区| 国产在线一二三| eeuss国产一区二区三区| 91精品视频免费看| 特级西西444www高清大视频| 夜夜嗨一区二区三区| 久久99久久99精品中文字幕| 萌白酱视频在线| 精品国产欧美日韩| 亚洲人成伊人成综合网久久久| 国产精品果冻传媒| 日韩中文字幕无砖| 宅男噜噜噜66一区二区66| a在线观看免费视频| 主播大秀视频在线观看一区二区| 欧美性生活大片免费观看网址| 国产欧美日韩小视频| 肉体视频在线| 一区二区三区中文字幕| 人妻无码一区二区三区四区| 国产人成网在线播放va免费| 国产精品久久久久久户外露出 | 国产精品久久久久久久久借妻| 日韩欧美性视频| 日韩亚洲精品在线| 欧美一级电影免费在线观看| 日韩少妇高潮抽搐| 中文久久精品| 欧美一区二区三区免费视| wwwxxx亚洲| 久久精品电影| 国产精品91久久久| 中文字幕一区二区人妻| 麻豆久久一区二区| 91中文在线视频| 国产视频手机在线观看| 丰满少妇久久久久久久| 精品中文字幕人| 欧美日韩在线中文字幕| 国产日产欧美一区二区三区| 亚洲国产一区二区在线| 国产在线激情| 香蕉乱码成人久久天堂爱免费| 久久亚洲中文字幕无码| 亚洲综合在线电影| 欧美久久久久久久久中文字幕| 日韩精品视频网址| 国产一区二区在线视频你懂的| 日韩hd视频在线观看| 中文字幕 亚洲一区| 你懂的一区二区三区| 中文字幕精品国产| 18精品爽视频在线观看| 99香蕉国产精品偷在线观看| 国产精品igao视频| 国产精品无码天天爽视频| 粉嫩欧美一区二区三区高清影视 | 一个色综合久久| 日韩不卡在线视频| 亚洲欧美综合精品久久成人| 日韩av网站在线播放| 欧美视频官网| 国产ts人妖一区二区三区 | 欧美办公室脚交xxxx| 欧美日韩一区二区免费在线观看| 亚洲一区二区三区四区五区xx| 玖玖玖电影综合影院| 亚洲国产中文字幕久久网| 快灬快灬一下爽蜜桃在线观看| 欧美福利影院| 国产大片精品免费永久看nba| 国产女人18毛片水18精| 91久色porny| 在线观看污视频| 中文字幕这里只有精品| 日韩小视频在线观看专区| 国产伦精品一区二区三区妓女| 国产精品88久久久久久| 4388成人网| 精品国产va久久久久久久| 久久久www免费人成精品| 蜜臀av.com| 四虎4545www国产精品| 欧美v日韩v国产v| 亚洲女人久久久| 免费久久99精品国产自在现线| 亚洲自拍偷拍区| 国产精品麻豆一区二区三区 | 成av人片一区二区| 中文字幕人成一区| 都市激情综合| 欧美精品一区二区三区久久久| 天天色影综合网| 日韩成人免费电影| 久久免费看av| 99riav视频在线观看| 在线电影欧美成精品| 亚洲欧美va天堂人熟伦| 久久成人免费| 精品不卡在线| av影视在线看| 日韩一级黄色大片| 黄色片子在线观看| 美女脱光内衣内裤视频久久影院| 欧美男人的天堂| sm在线观看| 精品日韩欧美一区二区| 久草视频手机在线| 国产麻豆视频一区二区| 中文字幕黄色大片| 美女视频一区| 中日韩美女免费视频网站在线观看 | 亚洲激情图片一区| 日日夜夜精品视频免费观看| 日韩一区亚洲二区| 国产美女精品视频免费观看| 成年人视频免费在线观看| 色噜噜狠狠成人中文综合| 扒开jk护士狂揉免费| 三级在线观看一区二区| 日韩av高清| 成人国产激情在线| 日韩在线观看视频免费| 国产麻豆免费观看| 亚洲资源中文字幕| 日本69式三人交| 亚洲看片一区| 欧美日韩国产不卡在线看| 欧美大电影免费观看| 亚洲视频在线观看网站| 最新中文字幕免费| 综合久久一区二区三区| 波多野结衣免费观看| 在线欧美日韩| 欧洲久久久久久| 国产a亚洲精品| 久久久精品美女| 丁香花免费高清完整在线播放| 亚洲国产精品人人做人人爽| 风间由美一二三区av片| 热久久免费视频| 欧美少妇在线观看| 色88888久久久久久影院| 国产精品国产三级国产aⅴ浪潮 | 污污的网站18| 911精品美国片911久久久| 成人影片在线播放| 成人动漫一区| 精品国产一区二区三区四区在线观看 | youjizz亚洲女人| 国内精品视频一区二区三区八戒| 91视频 - 88av| 午夜a一级毛片亚洲欧洲| 国产精品一二三在线| 亚洲资源一区| 亚洲人成亚洲人成在线观看| 国产原创中文av| 亚洲成av人片一区二区三区| 五级黄高潮片90分钟视频| 精品亚洲欧美一区| 草草久久久无码国产专区| 91亚洲一区| 精品国产一区二区三| 欧美日韩免费电影| 97超级碰在线看视频免费在线看 | 国产精品久久久久久久蜜臀 | 久久夜色精品国产| 色猫av在线| 欧美一区日本一区韩国一区| 4438国产精品一区二区| 中文字幕视频一区二区三区久| 国产真实乱人偷精品| 精品一区二区在线免费观看| a√天堂在线观看| 一级欧洲+日本+国产| 欧美精品国产精品久久久| 国产亚洲字幕| 国产精品aaa| wwwww亚洲| 精品国产欧美一区二区三区成人 | 精品一级视频| 国产精品白嫩初高中害羞小美女 | 国产精品高清在线观看| www欧美xxxx| 欧美日韩国产va另类| 草草影院在线观看| 日韩精品一二三四区| 国产成人三级在线观看视频| 欧美日韩日日摸| 五月婷婷亚洲综合| 亚洲一区二区三区在线看| 手机在线免费看片| 国产欧美精品国产国产专区 | 日韩伦理一区二区三区| 99久久99| 精品视频在线播放一区二区三区 | 激情视频极品美女日韩| 亚洲qvod图片区电影| 巨大黑人极品videos精品| 国产精品国产亚洲伊人久久| 国产高清视频色在线www| 欧美俄罗斯乱妇| a级影片在线观看| 久久精品青青大伊人av| 日韩在线免费电影| 中文字幕国产日韩| 97超碰人人在线| 亚洲性生活视频| 国产精品一二三区视频| 亚洲天堂一区二区三区| 九色在线观看| 国产亚洲a∨片在线观看| 久青草国产在线| 亚洲视频777| 在线免费观看黄| 日韩中文视频免费在线观看| 男人天堂手机在线| 久久精品最新地址| 在线不卡日本v二区707| 欧美黑人性视频| av影院在线| 欧美自拍视频在线| free欧美| 成人午夜在线观看| 77成人影视| 国模一区二区三区私拍视频| 亚洲男人都懂第一日本| 日韩久久精品一区二区三区| 日韩av免费大片| 中文字幕免费高| 亚洲午夜一级| 777久久久精品一区二区三区 | 尤物国产在线观看| 国产一区二区三区日韩 | 一本色道久久综合无码人妻| 51精品视频一区二区三区| 黄片毛片在线看| 国产丝袜一区视频在线观看| av电影在线网| 九九精品视频在线观看| 欧美男男tv网站在线播放| 国产精品第10页| 99精品女人在线观看免费视频| 国产高清在线一区二区| 亚洲国产网址| 成人短视频在线看| 亚洲精品美女91| 亚洲一级免费观看| 国产69精品久久久久777| 野外性满足hd| 亚洲欧美日韩一区| 精品国产免费观看| 欧美日韩精品一区二区| 亚洲精品一级片| 国产一区二区免费| 免费看电影在线| 国产精品久久久久91| 中文一区二区三区四区| 日韩精品成人一区二区在线观看| 亚洲天堂免费| av免费在线播放网站| 国产精品99久久久久久似苏梦涵 | 亚洲视频第二页| 成人激情免费网站| 天天色天天综合| 欧美日韩亚洲一区二| av免费观看在线| 亚洲性av网站| 乱人伦视频在线| 96sao精品视频在线观看| 免费视频国产一区| 精品国产av无码一区二区三区| 另类中文字幕网| 国产精品一区二区入口九绯色| 亚洲手机成人高清视频| 欧美日韩一级黄色片| 欧美精品一区二区三区蜜臀| 欧美成人性生活视频| 国产精品69精品一区二区三区| 99久久香蕉| 中文一区一区三区免费| 久久精品日产第一区二区| 一级全黄裸体片| 国产精品不卡一区二区三区| 中文字幕精品无码一区二区| 精品捆绑美女sm三区| 超鹏97在线| 91精品国产综合久久香蕉| av伊人久久| 能看的毛片网站| 久久久久久久久久电影| 日本道在线观看| 亚洲成人亚洲激情| 日本性爱视频在线观看| 91夜夜揉人人捏人人添红杏| 不卡在线一区二区| 茄子视频成人免费观看| av在线不卡网| 日韩av一区二区在线播放| 精品久久一区二区三区| 午夜av在线免费观看| 成人免费观看a| 偷偷www综合久久久久久久| 天美星空大象mv在线观看视频| 久久久99免费| 日本免费在线观看视频| 亚洲精品乱码久久久久久金桔影视 | 五月综合久久| 成年人观看网站| 久久综合久久久久88| 久久午夜免费视频| 日韩成人在线免费观看| 精品人人视频| 久久久久国产精品视频| 久久黄色网页| 国产中年熟女高潮大集合| 在线亚洲免费视频| 精品视频一二区| 国产精品久久97| 日韩欧美在线中字| 婷婷中文字幕在线观看| 最新国产成人在线观看| 国产人妻精品一区二区三| 久久成年人免费电影| 日韩精品三级| 欧美一区二区视频在线播放| 成人一区二区三区视频在线观看 | av网站有哪些| 91久久久免费一区二区| 色的视频在线免费看| 亚洲综合在线小说| 亚洲人成毛片在线播放女女| www.色天使| 欧美日韩国产免费| 污污影院在线观看| 韩国精品一区二区三区六区色诱| 99国内精品| xxxx日本黄色| 91精品国产综合久久久久| 91九色国产在线播放| 久久综合一区二区三区| 蜜桃久久av一区| 色婷婷在线视频观看| 亚洲福利视频免费观看| 韩国精品主播一区二区在线观看 | 亚洲女人av| 国产一区在线观看免费| 日韩精品一区二区三区视频| 人狥杂交一区欧美二区| 亚洲人成77777| 成人久久久精品乱码一区二区三区| 国产一级免费视频| 久久精品视频在线| 欧美性生活一级片| 国产三级生活片| 精品久久久久久久久中文字幕| 无遮挡的视频在线观看 | 精品日韩在线| 911亚洲精选| 欧美日韩在线综合| 国产高清中文字幕在线| 精品一区二区成人免费视频| 91啪亚洲精品| www.久久色| 国产日韩精品在线观看|