前言
就我个人而言,不管多么吊的全文搜索,总是很不靠谱,关键时候总是掉链子,即使是买了昂贵的所谓的企业级的Elasticsearch,其提供的全文搜索功能也是很不靠谱,毕竟在维护基于es的日志搜索平台时,每天都有太多的人找我投诉搜不到想要的日志,而一去机器上用grep搜索的时候就有,具体细节我就不赘述了,所以我现在我只相信grep暴力搜索,好了不废话了,下面进入正题。
声明:
下面的代码全部基于Alist的一个老版本做的改动,这个版本是Version: v3.11.0-0-gfe416ba-dirty,如果你需要基于最新版本的Alist修改的话,应该可以举一反三。
修改完了之后参考下面的官方文档进行编译:
https://alist.nn.ci/zh/guide/install/source.html
预览
文件变动一览:
后端
-
删除文件夹:internal/search/db_non_full_text 因为internal/bootstrap/data/setting.go中的key为conf.SearchIndex的options值中的database_non_full_text修改为了grep,所以这个文件夹就用不到了
-
新增文件夹:internal/search/grep 这是新的grep搜索类型,要新增一个文件夹来实现
新增文件:
- internal/search/grep/search.go grep搜索的核心代码
- internal/search/grep/init.go grep搜索的init代码
修改文件:
- internal/bootstrap/data/setting.go 用来把db_non_full_text逻辑替换成grep搜索逻辑
- internal/search/import.go 用来导入新的grep搜索逻辑
前端
新增:无
修改文件:
- src/pages/home/folder/Search.tsx 用来支持在新的标签页打开搜索结果中的html
- src/pages/home/previews/index.ts 用来让html文件默认用html预览工具来打开
开干
玩的就是真实。
后端
后端新增文件internal/search/grep/search.go文件内容如下:
|
|
后端新增文件internal/search/grep/init.go文件内容如下:
|
|
后端修改文件internal/bootstrap/data/setting.go具体为:
把key为conf.SearchIndex的options值中的database_non_full_text修改为grep
后端修改文件internal/search/import.go具体为:
把db_non_full_text改为grep
前端
前端修改文件src/pages/home/folder/Search.tsx具体为:
在SearchResult这个函数下面的return属性中新增一个 target="_blank"
属性,用来支持在新的标签页打开搜索结果中的html,示例代码如下:
|
|
前端修改文件src/pages/home/previews/index.ts具体为:
在函数getPreviews中将常量res改为变量:
从原来的 const res: PreviewComponent[] = []
变为 var res: PreviewComponent[] = []
然后在// iframe previews注释上方新增如下代码,用来让html文件默认用html预览工具来打开:
|
|
完整示例代码如下:
|
|
下面是如何实现支持中文:
去https://crowdin.com/backend/download/project/alist/zh-CN.zip这里下载中文语言包,解压后放到前端文件夹src/lang下面,然后返回前端项目根目录执行 node ./scripts/i18n.mjs,
此时src/lang/zh-CN下面会生成一个叫entry.ts的文件然后重新编译前端项目即可。
注意事项:
要把虚拟机内存调成4个G,然后执行如下命令:set NODE_OPTIONS=–max_old_space_size=4096