Emby高级教程:中文搜索增强实现教程

2022-08-28 16:47:07 26点赞 213收藏 18评论

【写作说明】

整体思路和操作来源于B站大神 Choyakawa,本人也是小白一枚,只是对自己的操作过程做一个详细记录。

【写作缘由】

Emby 的搜索功能太烂了,中文支持极差。通过分析Emby数据库采用sqlite3,sqlite3的原生FTS索引本来中文搜索就比较烂,所以Emby的搜索烂这也不能完全算是Emby的锅。

Emby本身采用c# net跨平台开发,我们可以通过反编译的方式修改搜索功能,使用wangfenjin大神的simple FTS扩展插件,建立FTS索引搜索,以此来支持中文拼音全拼搜索,中文拼音首字母搜索。

【效果展示】

Emby高级教程:中文搜索增强实现教程

Emby高级教程:中文搜索增强实现教程

【simple插件介绍】

simple 是一个支持中文和拼音的 sqlite3 fts5 拓展。它完整提供了 微信移动端的全文检索多音字问题解决方案 一文中的方案四,非常简单和高效地支持中文及拼音的搜索。

【准备工作和注意事项】

1、 .Net反编译工具

  • 推荐使用 dnSpyEx/dnSpy 的最新版本6.2,不要使用 dnSpy/dnSpy 6.1.8,

  • 反编译中所有的修改请使用编辑方法而不是编辑类

2、SQLite 数据库管理软件:所有的都可以,比如Navicat,也可以使用命令行。

3、请自行查找所用平台Emby的安装目录,本教程需要修改三个文件:

  • 软件安装目录下system目录下的SQLitePCL.pretty.dll文件

  • 软件安装目录下system目录下的Emby.Server.Implementations.dll文件

  • 软件安装目录下data目录下的library.db文件

注意:请做好这三个文件的备份,以防数据丢失。Emby高级教程:中文搜索增强实现教程

system文件夹下的dll文件之间存在依赖,建议将system文件夹(包含所有文件)拷贝出来。

4、所有的修改请在Emby关闭的情况下进行。

5、所用到的工具:dnSpyEx/dnSpy 和 wangfenjin/simple 请自行到全球最大的代码托管网站搜索下载。

【修改SQLitePCL.pretty.dll】

反编译修改 SQLitePCL.pretty.dll 文件中 Emby链接SQLite 数据库的方法,增加允许运行时可加载扩展 sqlite3_enable_load_extension 的 SQLite C - API 调用。

raw.sqlite3_enable_load_extension(sqlite, 1);

Emby高级教程:中文搜索增强实现教程

Emby高级教程:中文搜索增强实现教程

Emby高级教程:中文搜索增强实现教程

Emby高级教程:中文搜索增强实现教程

Emby高级教程:中文搜索增强实现教程

Emby高级教程:中文搜索增强实现教程

【修改Emby.Server.Implementations.dll】

1、点击 文件-----打开 选择 Emby.Server.Implementations.dll

2、修改 Emby FTS5实现,使用自定义 tokenizer

using System.IO;

databaseConnection.Execute("SELECT load_extension('" + Path.Combine(this._config.ApplicationPaths.DataPath, "libsimple") + "');");

Emby高级教程:中文搜索增强实现教程

Emby高级教程:中文搜索增强实现教程

Emby高级教程:中文搜索增强实现教程

Emby高级教程:中文搜索增强实现教程

还是在这个方法下面,一长串SQL中,修改FTS5 tokenize 为simple

Emby高级教程:中文搜索增强实现教程

Emby高级教程:中文搜索增强实现教程

private string GetJoinCommandText 中 @SearchTerm 修改为 simple_query(@SearchTerm)

Emby高级教程:中文搜索增强实现教程

Emby高级教程:中文搜索增强实现教程

3、兼容输入法候选词(作者说能省,但是实际测试不能省,省了搜索结果为零),重写CreateSearchTerm方法

  • 需要增加引用System.Text.RegularExpressions

using System.Text.RegularExpressions;

private string CreateSearchTerm(string searchTerm)
{
string newSearchTerm = searchTerm;
if (Regex.Matches(searchTerm, "'").Count >= 3)
{
newSearchTerm = searchTerm.Replace("'", "");
}
return newSearchTerm;
}

Emby高级教程:中文搜索增强实现教程

Emby高级教程:中文搜索增强实现教程

4、修改搜索实现部分代码,增强和优化部分功能

if (!string.IsNullOrEmpty(query.NameStartsWith))
{
query.SearchTerm = query.NameStartsWith;
query.NameStartsWith = null;
}

if (!string.IsNullOrEmpty(query.SearchTerm) && query.IncludeItemTypes.Length == 0)
{
query.IncludeItemTypes = new string[]{ "Movie", "Series", "BoxSet", "Audio", "MusicAlbum","MusicArtist"};
}

Emby高级教程:中文搜索增强实现教程

Emby高级教程:中文搜索增强实现教程

5、修改EnableJoinFtsSearch

  • 增加Limit=50 的条件限制EnableFts

说明:此处作者给的,增加Limit=50、GroupProgramsBySeries=true两个条件限制EnableFts,实测这样修改的话,搜索页面即时没有结果也会默认出现50个无关结果,所以我只增加了Limit=50的限制。

private bool EnableJoinFtsSearch(InternalItemsQuery query)

{

int? limit = query.Limit;

int num = 50;

return (limit.GetValueOrDefault() == num & limit != null) && (!string.IsNullOrEmpty(query.SearchTerm) || (!string.IsNullOrEmpty(query.Name) && this.IsNameSearchaleWithFts(query.Name)));

}

Emby高级教程:中文搜索增强实现教程

6、保存Emby.Server.Implementations.dll

Emby高级教程:中文搜索增强实现教程

Emby高级教程:中文搜索增强实现教程

【修改SQLite 数据库,重建索引表】

注意拷贝library.db的时候请在Emby关闭的情况下进行,如果有library.db、library.db-shm、library.db-wal三个文件请同时备份并拷贝出来进行修改,修改后一般只剩一个文件:library.db,请用这个文件替换原有的三个文件。

以Mac的Navicat为例:

Emby高级教程:中文搜索增强实现教程

Emby高级教程:中文搜索增强实现教程

Emby高级教程:中文搜索增强实现教程

断开并删除链接即可

【替换文件】

  1. 请将修改的两个dll文件替换源文件

  2. 将修改后的db数据库文件替换源文件

  3. wangfenjin/simple 项目下下载对应平台下的simple编译好的插件并放在和数据库相同的目录下。注意:群晖请下载 libsimple-linux-ubuntu-18.04.zip,实在不行的请自行编译。

  4. 在linux下替换文件时请注意修改权限。

【总结】

如果你看的一头雾水请不要尝试,对linux命令了解甚少请不要尝试。

作者声明本文无利益相关,欢迎值友理性交流,和谐讨论~

展开 收起

UGREEN 绿联 DX4600 Pro 4盘位NAS(奔腾N6005、8GB)

UGREEN 绿联 DX4600 Pro 4盘位NAS(奔腾N6005、8GB)

1899元起

ZSpace 极空间 私有云 Z4Pro 8G版 4盘位NAS存储(N97、8GB)

ZSpace 极空间 私有云 Z4Pro 8G版 4盘位NAS存储(N97、8GB)

2485.01元起

UGREEN 绿联 DX4600 四盘位NAS存储 (赛扬N5105、8GB)

UGREEN 绿联 DX4600 四盘位NAS存储 (赛扬N5105、8GB)

1779元起

ZSpace 极空间 私有云 Z4Pro 性能版 NAS存储(N305、16GB)

ZSpace 极空间 私有云 Z4Pro 性能版 NAS存储(N305、16GB)

3499元起

QNAP 威联通 TS-464C2 四盘位 NAS网络存储(赛扬N5095、8GB)黑色

QNAP 威联通 TS-464C2 四盘位 NAS网络存储(赛扬N5095、8GB)黑色

2679元起

ZSpace 极空间 私有云 Z4Pro 16G版 4盘位NAS存储(N97、16GB)

ZSpace 极空间 私有云 Z4Pro 16G版 4盘位NAS存储(N97、16GB)

2799元起

Synology 群晖 DS224+ 双盘位NAS(赛扬J4125、2GB)

Synology 群晖 DS224+ 双盘位NAS(赛扬J4125、2GB)

2829元起

ZSpace 极空间 私有云 Z423 旗舰版 8盘位NAS存储(锐龙R7-5825U、64GB)

ZSpace 极空间 私有云 Z423 旗舰版 8盘位NAS存储(锐龙R7-5825U、64GB)

5899元起

UGREEN 绿联 DX4600+ 4盘位NAS(赛扬N5105、8GB)

UGREEN 绿联 DX4600+ 4盘位NAS(赛扬N5105、8GB)

1979元起

TERRAMASTER 铁威马 F4-424 Pro 四盘位NAS(Intel Core i3、32GB)黑色

TERRAMASTER 铁威马 F4-424 Pro 四盘位NAS(Intel Core i3、32GB)黑色

2499元起

ASUS 华硕 AS6702T 4盘位NAS存储 黑色(Core2 Quad Q8300、4GB)

ASUS 华硕 AS6702T 4盘位NAS存储 黑色(Core2 Quad Q8300、4GB)

4279元起

QNAP 威联通 TS-466C 四盘位NAS(奔腾N6005、8GB)

QNAP 威联通 TS-466C 四盘位NAS(奔腾N6005、8GB)

3299元起

UGREEN 绿联 DH2600 双盘位NAS (N5105、4GB)

UGREEN 绿联 DH2600 双盘位NAS (N5105、4GB)

1329元起

Synology 群晖 DS220+ 2盘位NAS (赛扬J4025、2GB)

Synology 群晖 DS220+ 2盘位NAS (赛扬J4025、2GB)

2179元起

ZSpace 极空间 私有云Z2Pro 四核2盘位NAS家庭个人云网络存储服务器手机平板扩容适用iPhone15 水

ZSpace 极空间 私有云Z2Pro 四核2盘位NAS家庭个人云网络存储服务器手机平板扩容适用iPhone15 水

1299元起

sgwbox 拾光坞 N3 星光版V1(瑞芯微RK3566,2G,支持docker)

sgwbox 拾光坞 N3 星光版V1(瑞芯微RK3566,2G,支持docker)

461元起
18评论

  • 精彩
  • 最新
提示信息

取消
确认
评论举报

相关好价推荐
查看更多好价

相关文章推荐

更多精彩文章
更多精彩文章
最新文章 热门文章
213
扫一下,分享更方便,购买更轻松