当前位置: 首页 > article >正文

Jellyfin的快速全文搜索代理JellySearch

在这里插入图片描述

今年不在上海过年。以往回家都是自驾,这次女儿帮忙抢到了高铁票,明天出发。


简介

什么是 JellySearch ?

JellySearch 是一个快速的全文搜索代理,专为 Jellyfin 设计,与大多数 Jellyfin 客户端无缝集成。

工作原理

    1. 代理功能

JellySearch 作为 Jellyfin 的搜索代理,接收用户的搜索请求并将其转发到 Jellyfin 服务器。它充当中间层,优化搜索过程。

    1. 全文搜索

JellySearch 结合了 MeiliSearch 等搜索引擎技术,能够快速处理和索引媒体库中的内容,使用户能够进行高效的全文搜索。

    1. API 请求

用户通过 HTTP 请求向 JellySearch 发送搜索查询。JellySearch 接收到请求后,解析查询参数并构造适当的 API 请求,然后将其发送到 Jellyfin

    1. 结果返回

一旦 Jellyfin 返回搜索结果,JellySearch 会将结果整理并返回给用户。这个过程确保了用户体验的流畅性和快速性。

    1. 索引管理

JellySearch 可能会定期从 Jellyfin 更新索引,以确保搜索结果的准确性和时效性。这通常由 MeiliSearch 处理,确保数据的最新性。

优点

  • 快速搜索:利用高效的全文搜索技术,能够迅速返回搜索结果,提升用户体验。
  • 减轻负担:作为 Jellyfin 的搜索代理,JellySearch 减少了 Jellyfin 服务器的负担,优化了资源使用。
  • 简化查询:提供直观的接口,用户可以轻松输入搜索条件,快速找到所需的媒体内容。
  • 实时更新:支持定期更新索引,确保搜索结果的准确性和时效性。
  • 拼写错误容忍:搜索功能对拼写错误具有较强的容错能力,用户即使输入不完全正确的关键词,仍然能找到相关结果。
  • 跨字段搜索:支持在多个字段中进行搜索,使得用户可以更全面地查找媒体内容,不局限于单一字段。

其他

当然,也不都是优点,也存在某些情况下无法正常工作,甚至存在一些安全性方面的问题,所以需要特别注意安全配置,以保护其媒体库的信息安全。

安装

在群晖上以 Docker 方式安装。

涉及到多个容器,采用 docker-compose 方式安装

nginx.conf

官方的示例使用的是 traefik 做反代,老苏不熟悉,同时也不想使用 https 协议,所以增加了 nginx 容器来做内部代理。

worker_processes 1;

events { }

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;

    server {
        listen 80;

        location / {
            # Proxy JellySearch
            if ($arg_searchTerm) {
                proxy_pass http://jellysearch:5000;
                break;
            }

            # Proxy main Jellyfin traffic
            proxy_pass http://192.168.0.197:8096;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
            proxy_set_header X-Forwarded-Protocol $scheme;
            proxy_set_header X-Forwarded-Host $http_host;

            # Disable buffering when the nginx proxy gets very resource heavy upon streaming
            proxy_buffering off;
        }
    }
}

其中 192.168.0.197 为群辉主机的 IP,而 http://192.168.0.197:8096 则指向了 Jellyfin 服务

为什么不使用 http://jellyfin:8096 这种内部的表达方式,是因为 jellyfin 安装使用的网络模式是 host,因此其实并不在同一个 docker 网络中

docker-compose.yml

将下面的内容保存为 docker-compose.yml 文件

version: '3'

services:
  jellyfin:
    image: jellyfin/jellyfin
    container_name: jellyfin-web
    restart: unless-stopped
    network_mode: "host"
    volumes:
      - ./config:/config
      - ./cache:/cache
      - ./media:/media
      - /volume1/netdisk/AirDisk/USB-DISK-A:/airdisk

  jellysearch:
    image: domistyle/jellysearch
    container_name: jellyfin-search
    restart: unless-stopped
    volumes:
      - ./config:/config:ro
    environment:
      MEILI_MASTER_KEY: "1234"
      MEILIMEILI_URL: http://meilisearch:7700
      INDEX_CRON: "0 0 0/2 ? * * *"
      JELLYFIN_URL: http://192.168.0.197:8096

  meilisearch:
    image: getmeili/meilisearch:v1.9
    container_name: jellyfin-meilisearch
    restart: unless-stopped
    volumes:
      - ./data:/meili_data
    environment:
      MEILI_MASTER_KEY: "1234"
      
  nginx:
    image: nginx:latest
    container_name: jellyfin-nginx
    restart: unless-stopped
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf:ro
    ports:
      - "5454:80" 

这里不涉及 jellyfin 的使用和硬解,有兴趣可以参考往期的文章。后台的 AI 客服在搜索能力及信息整合上,还是表现不错的

  1. 如果你已经安装了 jellyfin,可以去掉 docker-compose.yml 中的 jellyfin 部分
  2. /config 应该与您的 Jellyfin 配置目录相同,但只需要读取权限。
  3. MEILI_MASTER_KEY 可以是任意随机字符串,用于 JellySearchMeilisearch 之间的认证。
  4. INDEX_CRON 确定索引更新的间隔,例如0 0 0/2 ? * * * 表示每 2 小时一次。
  5. 其他环境变量
变量描述默认值是否必需
JELLYFIN_URL您的 Jellyfin 实例的完整 URLhttp://jellyfin:8096
JELLYFIN_CONFIG_DIR您挂载 Jellyfin 配置文件夹的目录。/config
INDEX_CRON运行重新索引的 cron 调度,如果没有它将不会自动重新索引。null
MEILI_URL您的 Meilisearch 实例可访问的 URLhttp://meilisearch:7700
MEILI_MASTER_KEY用于与 Meilisearch 进行身份验证的密钥。null

然后执行下面的命令

# 新建文件夹 jellyfin 和 子目录
mkdir -p /volume1/docker/jellyfin/{cache,config,media,data}

# 进入 jellyfin 目录
cd /volume1/docker/jellyfin

# 将 docker-compose.yml 放入当前目录

# 一键启动全部
docker-compose up -d

运行

在浏览器中输入 http://群晖IP:5454 就能看到 jellyfin 的界面

如果只通过 jellyfin 查询

搜索 异形,浏览器地址是 http://群晖IP:8096/web/#/search.html?query=异形

但是搜索 行星 是没有结果的

而通过 jellysearch 搜索 行星,则是有结果的,

此时浏览器地址是 http://群晖IP:5454/web/#/search.html?query=行星,唯一的区别就在于端口。

因为在简介中有 行星 出现

参考文档

Dominik / JellySearch · GitLab
地址:https://gitlab.com/DomiStyle/jellysearch

Install Jellysearch on native debian Jellyfin installation : r/selfhosted
地址:https://www.reddit.com/r/selfhosted/comments/1hu9zny/install_jellysearch_on_native_debian_jellyfin/


http://www.kler.cn/a/523378.html

相关文章:

  • 乌兰巴托的夜---音乐里的故事
  • ZZNUOJ(C/C++)基础练习1011——1020(详解版)
  • 新增文章功能
  • DFS深度优先搜索
  • IO进程寒假作业DAY6
  • 面向对象编程 vs 面向过程编程
  • iperf 测 TCP 和 UDP 网络吞吐量
  • 2025年数学建模美赛 A题分析(2)楼梯使用频率数学模型
  • t113 procd-init文件系统增加自己的程序文件
  • 7-Zip Mark-of-the-Web绕过漏洞复现(CVE-2025-0411)
  • 前端——js高级25.1.27
  • 20250128 大语言模型(Large Language Model, LLM)已成为自然语言处理(NLP)领域的重要突破
  • 脚本/编译安装nginx1.11.10
  • ArcGIS10.2 许可License点击始终启动无响应的解决办法及正常启动的前提
  • 使用 PyTorch 实现线性回归:从零开始的完整指南
  • Ubuntu 18.04安装Emacs 26.2问题解决
  • 大一计算机的自学总结:位运算的应用及位图
  • 在做题中学习(82):最小覆盖子串
  • Vue 响应式渲染 - 待办事项简单实现
  • 案例研究丨浪潮云洲通过DataEase推进多维度数据可视化建设
  • 图神经网络驱动的节点分类:从理论到实践
  • 神经网络和深度学习
  • DeepSeek-R1本地部署笔记
  • Zookeeper(31)Zookeeper的事务ID(zxid)是什么?
  • 集群建模、空地协同,无人机高效救灾技术详解
  • 【Elasticsearch】_rollover API详解