推广 热搜: page  小红  红书  数据  论文  考试  数据分析  关键词  哪些  搜索 

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

   日期:2024-12-20     移动:https://sicmodule.kub2b.com/mobile/quote/9095.html

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

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

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

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

1、 .Net反编译工具

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

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

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

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

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

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

raw.sqlite3_enable_load_extension(sqlite, 1);

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

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

using System.IO;

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

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

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

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

using System.Text.Regularexpressions;

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

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"};
}

5、修改EnableJoinFtsSearch

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

说明:此处作者给的,增加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)));

}

6、保存Emby.Server.Implementations.dll

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

以Mac的Navicat为例:

断开并删除链接即可

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

本文地址:https://sicmodule.kub2b.com/quote/9095.html     企库往 https://sicmodule.kub2b.com/ , 查看更多

特别提示:本信息由相关用户自行提供,真实性未证实,仅供参考。请谨慎采用,风险自负。


0相关评论
相关最新动态
推荐最新动态
点击排行
网站首页  |  关于我们  |  联系方式  |  使用协议  |  版权隐私  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  鄂ICP备2020018471号