精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

狠狠人妻久久久久久综合| 中文字幕无人区二| 在线观看免费版| 国产美女娇喘av呻吟久久| 久久久久久久久久亚洲| 人妻丰满熟妇aⅴ无码| 国产成人免费精品| 亚洲精品免费视频| 六月婷婷久久| 国产精品高潮呻吟av| 欧美人成在线| 亚洲视频在线看| 无码人妻少妇色欲av一区二区| 97人澡人人添人人爽欧美| 国产午夜亚洲精品理论片色戒| 成人美女免费网站视频| 亚洲第一在线播放| 午夜精品av| 中文字幕日韩欧美| 怡红院一区二区| 日本午夜精品久久久久| 精品magnet| 午夜啪啪福利视频| 免费成人av电影| 成人综合在线观看| 91久久久久久| 一区二区三区麻豆| 在线视频精品| 欧美黑人国产人伦爽爽爽| 黄色国产在线播放| 要久久电视剧全集免费| 日韩欧美精品在线视频| 亚洲美女爱爱视频| 久久91导航| 午夜精品国产更新| 日本黄网站色大片免费观看| 日本电影在线观看网站| 国产亚洲污的网站| 久久久久久久久一区| 成人毛片在线精品国产| 激情五月婷婷综合网| 国产成人一区二区三区电影| 91视频免费网址| 一区在线免费观看| 久久亚洲电影天堂| 欧美性生交大片| 精品一区av| 亚洲夜晚福利在线观看| 中文字幕一区二区人妻在线不卡 | 国产精品久久久久久久久久10秀| 日韩电影在线观看中文字幕| 影音先锋资源av| 爱高潮www亚洲精品| 日韩欧美国产一区二区在线播放| 日本国产一级片| 欧美黄页在线免费观看| 欧美日韩美少妇| 亚洲欧美自偷自拍另类| 日韩第二十一页| 欧美女孩性生活视频| 中文字幕 日韩 欧美| 欧美美女福利视频| 777亚洲妇女| 被黑人猛躁10次高潮视频| 精品一区二区三区四区五区 | 一区二区三区毛片免费| 欧美日韩福利在线观看| 久久久国产精华液| 亚洲激情社区| 欧美在线观看一区二区三区| 国产美女永久无遮挡| 1stkiss在线漫画| 亚洲一级二级三级| 免费欧美一级视频| 日日av拍夜夜添久久免费| 欧美中文字幕一区| 伊人免费视频二| 国产丝袜一区| 亚洲欧洲美洲在线综合| 国产探花视频在线播放| 欧美黄色录像片| 日韩一级二级三级| 88av在线播放| 国产精品一区二区av日韩在线 | 国产一区二区三区av在线 | 久久久999国产| 国产大片aaa| 日韩高清在线不卡| 51蜜桃传媒精品一区二区| 视频污在线观看| 美国av一区二区| 91视频8mav| 亚洲日本在线播放| 国产精品短视频| 青青草国产精品视频| 欧美色网一区| 日韩午夜中文字幕| 一区二区三区伦理片| 一级欧洲+日本+国产 | 特级西西444| 欧美性xxx| 日韩精品在线一区二区| 91成年人网站| 激情欧美国产欧美| 国产一区二区在线免费| 欧洲毛片在线| 一区二区三区欧美激情| 99久久久无码国产精品6| 精品91福利视频| 在线免费看av不卡| 日韩成人高清视频| 国产乱码精品一品二品| 日产精品高清视频免费| av丝袜在线| 欧美精品久久久久久久多人混战| 欧美亚一区二区三区| 亚洲国产精品日韩专区av有中文 | 在线视频日韩精品| 国产午夜福利一区二区| 国产一区二区三区香蕉| 日本一区二区三区在线视频| 黄毛片在线观看| 日韩欧美国产综合一区 | 亚洲乱码久久| 91精品久久久久久蜜桃| 拍真实国产伦偷精品| 日本福利一区二区| 亚洲狠狠婷婷综合久久久久图片| 欧美深夜福利| 51国偷自产一区二区三区 | 亚洲精品欧美专区| www亚洲成人| 欧美精品色图| 国产999精品久久久| 午夜一区在线观看| 亚洲成人av一区| 国产日韩视频一区| 欧美三级乱码| 国产欧美日韩在线播放| 久草免费在线色站| 精品日韩一区二区三区| 欧美卡一卡二卡三| 国产精品主播直播| 毛片在线视频观看| 911亚洲精品| 欧美激情欧美激情| 乱精品一区字幕二区| 亚洲自拍欧美精品| 日本精品一二三区| 亚洲精选国产| 久久天天狠狠| 电影一区二区三| 在线观看视频一区二区| 精品人妻一区二区三区视频| 久久裸体视频| 亚洲精品成人a8198a| 成人国产网站| 久久视频精品在线| 国内精品国产成人国产三级| 亚洲一区二区三区爽爽爽爽爽 | 久久精品亚洲乱码伦伦中文 | 国产精品亚洲午夜一区二区三区 | 天堂午夜影视日韩欧美一区二区| 韩国成人一区| 欧美大片免费高清观看| 在线看日韩av| av资源免费看| 岛国av一区二区在线在线观看| 91中文字幕永久在线| 日韩电影网1区2区| 天天综合五月天| 中文字幕视频精品一区二区三区| 国模叶桐国产精品一区| 极品美乳网红视频免费在线观看| 欧美亚洲国产bt| 久热这里有精品| 99re热视频精品| 深夜黄色小视频| 韩国亚洲精品| 欧美精品一区二区三区四区五区| 亚洲一区导航| 91精品国产免费久久久久久| 国产精品一级伦理| 制服.丝袜.亚洲.另类.中文 | 欧美日韩一区视频| 欧美黄色一区二区三区| 久久久精品tv| 国产精品99久久久精品无码| 久久这里只有| japanese在线播放| 欧美日韩老妇| 成人免费在线看片| 欧美a视频在线| 国内精品400部情侣激情| 高清在线观看av| 精品国产制服丝袜高跟| 中文字幕在线一| 亚洲超碰精品一区二区| 午夜精品久久久久99蜜桃最新版| www.视频一区| а 天堂 在线| 久久精品首页| 成人av在线不卡| 第一会所亚洲原创| 精品国产乱码久久久久久郑州公司 | 中文字幕中文在线不卡住| 日韩一区国产在线观看| 久久国内精品视频| 亚洲a∨一区二区三区| 视频一区视频二区欧美| 国产精国产精品| 牛牛精品视频在线| 欲色天天网综合久久| 丰满肥臀噗嗤啊x99av| 欧美天天综合网| 欧美另类69精品久久久久9999| 91丝袜在线观看| 韩国一区二区在线观看| 国产成人av影视| 亚洲黄色影院| 成人在线免费观看视频网站| 第四色成人网| 日本中文不卡| 要久久爱电视剧全集完整观看| 成人永久免费| 日韩在线观看中文字幕| 国产日韩欧美在线看| 亚洲www.| 日本一本a高清免费不卡| 国产三级伦理在线| 九九久久久久99精品| 久操视频在线免费播放| 在线免费观看羞羞视频一区二区| 九九在线视频| 亚洲欧美日韩一区二区在线 | 日韩理论片在线观看| 欧美三级电影在线| 国产欧美亚洲日本| 成人在线tv视频| 国产精品xxxx| 国产精品国产| 精品婷婷色一区二区三区蜜桃| av毛片精品| 国产精品夜夜夜一区二区三区尤| 日韩在线观看一区二区三区| 97超碰人人模人人爽人人看| 精品国产亚洲一区二区三区大结局| 国产精品爽爽爽| 欧美一区=区三区| 成人黄色网免费| 国产精品毛片aⅴ一区二区三区| 91免费精品视频| 精品视频成人| 成人18视频| 红杏一区二区三区| 久久久久久亚洲精品不卡4k岛国 | 大陆极品少妇内射aaaaaa| 亚洲电影影音先锋| 色屁屁一区二区| 欧美成人三级在线播放| 麻豆精品精品国产自在97香蕉| 爱情岛论坛亚洲首页入口章节| 麻豆精品在线看| 成年人网站av| 成人精品视频网站| 日本黄色特级片| 国产精品妹子av| 麻豆成人在线视频| 婷婷六月综合亚洲| 亚洲免费视频二区| 91精品国产福利在线观看| 成人h动漫精品一区二区无码| 亚洲福利视频在线| 久久av少妇| 久久精品视频一| a毛片不卡免费看片| 国产精品99久久99久久久二8| 色999久久久精品人人澡69| 99三级在线| 伊人成综合网yiren22| 在线成人性视频| 韩日视频一区| 亚洲少妇第一页| 国产成人自拍网| 国产精品毛片一区二区| 亚洲欧美一区二区三区久本道91| 国产一卡二卡在线| 欧美唯美清纯偷拍| 天天综合网在线观看| 伊人伊成久久人综合网站| 国产激情在线| 日本久久久久久久久久久| 国产精品亚洲一区二区在线观看 | 中文 日韩 欧美| 成人免费毛片片v| 亚洲AV无码片久久精品| 亚洲欧美偷拍另类a∨色屁股| 黄网在线观看视频| 在线电影院国产精品| 人人九九精品| 欧美老女人性视频| 成人涩涩视频| 精品久久久久久亚洲| 亚洲精品一二三区区别| 国产熟女高潮视频| 处破女av一区二区| 极品美妇后花庭翘臀娇吟小说| 黑人精品xxx一区一二区| av片免费播放| 在线日韩精品视频| 中文字幕人成乱码在线观看 | 性欧美xxxx免费岛国不卡电影| 国产精品99久久久久久大便| 亚洲一区二区免费看| 国产成人精品综合久久久久99| 国产欧美日韩精品在线| 亚欧视频在线观看| 日韩欧美一区二区视频| 在线国产91| 国产精品aaaa| 日韩超碰人人爽人人做人人添| 国产 国语对白 露脸| 精品一区二区三区在线观看国产| 人妻少妇精品视频一区二区三区| 亚洲一区在线播放| 99久久一区二区| 色偷偷av一区二区三区乱| 亚洲一区二区三区四区| 精品乱子伦一区二区三区| 欧美日本一区二区高清播放视频| 亚洲一区精品视频在线观看| 中文字幕精品三区| 色老头一区二区| 亚洲免费一在线| 日韩欧美精品一区二区三区| 国产精品一区二区三区精品| 国精品一区二区三区| 国产精品熟女一区二区不卡| 亚洲日本一区二区| 国产免费久久久| 久久久国产精品免费| 国产美女视频一区二区 | 中文字幕av久久爽一区| 日本精品视频一区二区三区| 裸体xxxx视频在线| 国产成人久久久精品一区| 奇米亚洲欧美| 色婷婷狠狠18| 中文字幕一区日韩精品欧美| 一区二区三区黄色片| 久久精品成人欧美大片古装| www.久久草.com| 在线观看17c| 成人爱爱电影网址| 国产精品免费精品一区| 国产小视频国产精品| 99精品在免费线偷拍| 明星裸体视频一区二区| 欧美日韩在线大尺度| 人妻av一区二区| 一道本成人在线| 婷婷丁香一区二区三区| 九九热最新视频//这里只有精品| 日韩影院在线| 在线观看欧美亚洲| 美女www一区二区| 亚洲怡红院在线观看| 日韩视频不卡中文| av网站免费在线观看| 国产日韩欧美一区二区三区四区| 男女av一区三区二区色多| 免费看污片的网站| 欧美午夜精品伦理| 免费在线视频一级不卡| 国产精品中文字幕在线| 欧美午夜不卡| 一本加勒比北条麻妃| 欧美精品日韩综合在线| 色呦呦在线资源| 高清免费日韩| 狠狠综合久久| 成人乱码一区二区三区av| 欧美日韩亚洲视频一区| 色呦呦免费观看| 日本久久久久久久久久久| 亚洲天堂一区二区三区四区| 在线观看中文av| 日韩理论片一区二区| 亚洲色图另类小说| 国产精品69久久| 欧美三级第一页| 免费成人深夜天涯网站| 欧美日韩一级大片网址| 成a人片在线观看| 成人国产精品一区二区| 国产精品日本欧美一区二区三区| 中文字幕第69页| 亚洲精品电影在线| 精品一区二区三区四区五区| 国内外免费激情视频|