简单的搜索需要解决的问题

725 阅读2分钟

索引

  • 倒排索引就是反向查找数据集
  • 正排索引就是直接能查找数据
  • 搜索数据的时候先通过关键字->倒排找到文件位置->得到文件内容

image.png

  • 第一段话可以想象为数组,index为1,2,通过1,2可以直接访问得到想要的是正排索引
  • 第二段关键字需要切词器,后面对应的索引位置 例如 厌烦对应文档1、上班对应文档1,2
  • 搜关键字上班-》找到索引1,2(倒排);然后通过1,2直接找到对应的话(正排)

切词器

  • 需要个切词器 对内容进行字段提取 切词器都有字典的,过滤一些语气词停词类的
  • 提取的字段对应编排对应的文件构成了索引,对应文件映射怎么处理

倒排索引构建

  • 我们可以用个map<key,list> key关键字 list存索引
  • 字典树每个字典节点是个关键字,存的数据是索引
  • B树构建索引但是我不知道怎么构建中文的排序搜索

正排索引构建

  • 数组当时量大
  • list 类型需要排序那种 因为生成索引的时候固定的
  • map 通过key直接查找

索引存储

  • 因为当数据量大的时候内存不够,或者机器重启都需要重新构建索引的,索引需要落盘
  • 当文档变化的时候索引内容需要变动
  • 文件量大如何分段
  • MMAP系统调用硬盘映射内存的
  • 索引文件加载的时候如何映射到索引的数据结构

数据查询排序

  • 单纯的集合交并差,输入字段搜索的理解
  • 匹配的数据量大了如何排序,依据什么
  • 如何有纠错能力英文的大小写,中文的拼音,谐音词

其他关键问题

  • 例如关键字在当前文档的关系度,对搜索结果很重要