专业的编程技术博客社区

网站首页 > 博客文章 正文

搜索引擎入门(3)—倒排索引(倒排索引的原理)

baijin 2024-10-27 08:05:22 博客文章 4 ℃ 0 评论

要了解倒排索引,先看一下什么是正排索引。比如有下面两句话:

  • id1, “搜索引擎提供检索服务”
  • id2, “搜索引擎是信息检索系统”

正排索引

正排索引就是 MySQL 里的 B+ Tree,索引的结果是:

  • “搜索引擎是信息检索系统” -> id2
  • “搜索引擎提供检索服务” -> id1

表示对完整内容按字典序排序,得到一个有序的列表,以加快检索的速度。

倒排索引

第一步 分词

  • “搜索引擎-提供-检索-服务” -> id1
  • “搜索引擎-信息-检索-系统” -> id2

第二步 将分词项构建一个词典

  • 搜索引擎
  • 提供
  • 检索
  • 服务
  • 信息
  • 系统

第三步 构建倒排链

  • 搜索引擎 -> id1, id2
  • 提供 -> id1
  • 检索 -> id1, id2
  • 服务 -> id1
  • 信息 -> id2
  • 系统 -> id2

由此,一个倒排索引就完成了,搜索 “检索” 时,得到 id1, id2,说明这两条数据都有,搜索 “服务” 只有 id1 存在。但如果搜索 “检索系统”,此时会先建搜索词按照与构建同一种策略分词,得到 “检索-系统”,两个词项,分别搜索 检索 -> id1, id2 和 系统 -> id2,然后对其做一个交集,得到 id2。同理,通过求并集可以支持更复杂的查询。

倒排索引到此也就讲清楚了吧。

存储结构

以 Lucene 为例,简单说明一下 Lucene 的存储结构。从大到小是Index -> Segment -> Doc -> Field -> Term,类比 MySQL 为 Database -> Table -> Record -> Field -> Value。

转自:https://my.oschina.net/yunqi/blog/3049807

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表