如何索引网盘资源?用 Elasticsearch 实现高效全文搜索
你已经采集了网盘链接,也解析出了文件列表。下一步,就是让用户能快速、准确地搜到资源。
靠数据库 LIKE '%xxx%'?太慢,不支持分词、权重、模糊匹配。正确做法:用 Elasticsearch(ES) + 中文分词 建立专业搜索引擎。
本文拆解网盘资源索引,包括:如何安装 ES;索引结构怎么设计,实现分网盘搜索、分文件类型搜索等;以及分词设置建议。所有内容为网盘搜索场景量身定制。
Elasticsearch 安装
ES 的安装和中文分词器(IK)配置,可参考此篇文章:👉 最新 Elasticsearch + 中文分词器安装与配置教程(Ubuntu 环境)
索引结构设计:分享链接索引 + 资源文件索引
根据网盘搜索的使用场景,建议建立 两类索引:
- 分享链接索引:用于搜索整个分享链接
- 资源文件索引:用于搜索分享的资源中的单个文件夹或者文件,比如:搜索其中某一个视频文件
分享链接索引(按资源搜索)
用于搜索“某个分享链接下的所有内容”,比如:
- “2025 公考资料”
- “黑神话:悟空”
索引字段设计:
{
"drive": "quark",
"share_title": "2025公务员考试全套资料",
"file_paths": "资料\n行测\n行测\n申论\n行测精讲\n真题.pdf\n申论模板.docx\n01.mp4",
"share_time": "2025-10-04"
}
搜索逻辑:
- share_title:权重最高(用户常搜标题)
- file_paths:作为补充,支持模糊匹配(可将所有的文件夹和文件拼接成一个字符串,用\n 换行,也可以按列表索引)
{
"query": {
"multi_match": {
"query": "公考资料",
"fields": [
"share_title^3", // 标题权重 x3
"file_paths" // 文件路径权重 x1
]
}
}
}
其中drive用于过滤,比如仅搜索夸克网盘资源,share_time用于搜索结果排序。
文件索引(按单个文件搜索)
用于搜索“特定类型的文件”,比如:
- “天地龙鳞”——音乐搜索
- “PS2025”——安装包搜索
索引字段设计:
{
"drive": "quark",
"file_name": "天地龙鳞",
"category": "3",
"share_time": "2025-10-04"
}
category 字段的值,在入库时就分类好,0:未分类 1:文件夹 2:视频 3:音频 4:图片 5:文档 6:软件 7:压缩文件 8:其他文件,比如.ai
搜索逻辑:
- 支持按文件类型过滤:category
: "3"
- 支持按创建时间排序:
sort: share_time
- 支持模糊匹配文件名:天地龙鳞
{
"query": {
"bool": {
"must": [
{ "match": { "file_name": "天地龙鳞" } }
],
"filter": [
{ "term": { "category": "3" } }
]
}
},
"sort": [
{ "share_time": { "order": "desc" } }
]
}
中文分词设置:IK + 最小分词长度
ES 默认英文分词,必须用 IK 分词器支持中文。
最小分词长度建议:2 个字。中文搜索中,单字(如“的”、“了”)无意义,且会降低性能。
推荐设置:
- 使用ik_max_word模式(细粒度分词)
- 在IKAnalyzer.cfg.xml中配置停用词,过滤常见无意义字
- 最小搜索词长度设为 2