Jellyfin的快速全文搜索代理JellySearch
今年不在上海过年。以往回家都是自驾,这次女儿帮忙抢到了高铁票,明天出发。
简介
什么是 JellySearch ?
JellySearch
是一个快速的全文搜索代理,专为Jellyfin
设计,与大多数Jellyfin
客户端无缝集成。
工作原理
-
- 代理功能
JellySearch
作为 Jellyfin
的搜索代理,接收用户的搜索请求并将其转发到 Jellyfin
服务器。它充当中间层,优化搜索过程。
-
- 全文搜索
JellySearch
结合了 MeiliSearch
等搜索引擎技术,能够快速处理和索引媒体库中的内容,使用户能够进行高效的全文搜索。
-
- API 请求
用户通过 HTTP
请求向 JellySearch
发送搜索查询。JellySearch
接收到请求后,解析查询参数并构造适当的 API
请求,然后将其发送到 Jellyfin
。
-
- 结果返回
一旦 Jellyfin
返回搜索结果,JellySearch
会将结果整理并返回给用户。这个过程确保了用户体验的流畅性和快速性。
-
- 索引管理
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
客服在搜索能力及信息整合上,还是表现不错的
- 如果你已经安装了
jellyfin
,可以去掉docker-compose.yml
中的jellyfin
部分 /config
应该与您的Jellyfin
配置目录相同,但只需要读取权限。MEILI_MASTER_KEY
可以是任意随机字符串,用于JellySearch
和Meilisearch
之间的认证。INDEX_CRON
确定索引更新的间隔,例如0 0 0/2 ? * * *
表示每2
小时一次。- 其他环境变量
变量 | 描述 | 默认值 | 是否必需 |
---|---|---|---|
JELLYFIN_URL | 您的 Jellyfin 实例的完整 URL 。 | http://jellyfin:8096 | 是 |
JELLYFIN_CONFIG_DIR | 您挂载 Jellyfin 配置文件夹的目录。 | /config | 是 |
INDEX_CRON | 运行重新索引的 cron 调度,如果没有它将不会自动重新索引。 | null | 否 |
MEILI_URL | 您的 Meilisearch 实例可访问的 URL 。 | http://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/