文本搜索引擎设计

搜索设计初稿

词汇定义

出现在本初稿中的名词定义:

  • 搜索命中:一个输入关键词和某一搜索对象的分词结果词组存在匹配,且匹配程度超过门限值(也可以不设置门限值),称该搜索对象被(该关键词)搜索命中。
    • 搜索命中不代表该对象一定在前端被展示出来,该关键词仅代表在后端搜索中会出现的一种状态。
  • 匹配:指两个字符串完全相同,或者同义对应,以及其他类型的对应
  • 搜索选择:指最终选择某一对象作为“搜索到的内容”被展示到前端

文件元数据

  • 文件名
  • 文件后缀
  • 文件路径(文件上级所有的文件夹)
  • 文件对应的网盘index页相对路径
  • 文件体积
  • 文件层数

文件夹元数据

  • 文件夹名
  • 文件夹路径
  • 文件对应的网盘index页相对路径
  • 文件层数

搜索逻辑

基础搜索逻辑

黑色实心圆点表示基础搜索逻辑,其他点是该条逻辑的具体表现,或是进一步探讨,以及两者同时存在

  • 待搜索的对象为每一个文件夹和文件

  • 匹配文件夹优先于匹配文件(#)

    • 第一目的是搜索出能包含大量文件的对象,因为待查询的资源可能是集中式打包的,其主要关键词都在资源的根路径名称上,而子路径以及叶子文件名缺乏关键词甚至没有。

    • 如果匹配中一个文件夹,则不再搜索其子节点

    • 同理,更高一级的文件夹会覆盖更低一级的文件夹

    • 如何选择匹配到一个文件的哪一级父文件夹(#)

      • 因为在从下向上搜索的过程中,要优先确定待匹配的文件夹。后出现的更高一级文件夹定位会覆盖掉前一级的文件夹定位。
      • 那么就要提前确定文件夹搜索结果,这样就不会因为搜索命中文件夹而将其子文件的搜索命中取消的情况频繁出现,以致浪费性能
      • 如上同理,文件夹匹配中亦会产生高层文件夹被搜索命中而取消其子文件夹的搜索命中的现象,所以需要从顶层向下一层层搜索
      • 总结:从上向下搜索,或者全盘搜索后从上向下遍历
  • 从文件名和文件夹名的分词结果提取待使用的关键词

    • 分词支持的语言有哪些:汉语,英语,
    • 可分词语言和不可分词语言的区别:
      • 搜索权重区别(#)
        • 内容是可分词语言的,权重最大
        • 内容是不可分词语言的,权重中等
        • 权重最小的内容:阿拉伯数字,其他
    • 多种可分词语言之间的区别(暂定汉语英语同级,其他降一档同级)
  • 对输入的内容处理后提交搜索(#)

    • 使用分词
      • 分词粒度
      • 语义正确性
    • 分词处理
      • 不查询停用词(stopWord)
        • 停用词表
      • 语义归一化
      • 词形归并(Lemmatization)
      • 词干还原(Stemming)
        • 词干还原算法
  • 拒绝搜索

    • 拒绝过长的搜索输入

      • 基于字符串长度限制
      • 基于输入的分词结果数量或计算数量和分词语言等计算上限
    • 拒绝恶意搜索

      • 仅包括各类文件后缀而没有其他内容
  • 具体的搜索逻辑

    • 单独开一栏
    • 带(#)的词条有必要在设计时被考虑
  • 对搜索结果排序

    • 后端排序
      • 文件夹和文件同权
      • 按搜索匹配权重结果排序
    • 前端排序
      • 文件夹和文件分开展示,比如两列

搜索权重(#)

功能定义

本节的搜索权重,是指在后端搜索过程中的搜索权重。后端搜索过程中,按搜索权重对各结果进行排序

依据权重还可以对结果进行筛选。

设计

  • 权重以整形数字的形式表现出来

  • 基于搜索内容的权重

    • 基于字符串内容是否可分词的权重
    • 基于分词语言的权重
    • 语义归一化的权重
    • 词形归并的权重
    • 词干还原的权重
  • 基于文件树结构的权重

    • 如果搜索命中且搜索选择某一文件夹,且其子目录和子文件中仍存在搜索命中,则应该认为这一被搜索选择的文件夹权重更高,对其加权。
      • 但这将要求更多的计算内容,需考虑增加的资源消耗。

其他

  • 收集搜索输入和输出结果,后期上机器学习优化搜索效果。

PS:意料之中的打击,everything具备web面板,暂时搁置