如何索引网盘资源?用 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