专业的编程技术博客社区

网站首页 > 博客文章 正文

elasticsearch 的倒排索引结构(倒排索引 实现)

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

Elasticsearch 是一个基于Lucene 的全文搜索和分析引擎。

由于elasticsearch是基于lucene开发的,那么我们要了解倒排索引的结果首先我们要了解lucene的索引结构。

Lucene 的索引结构主要分以下几个层次

  • 索引(Index)在 Lucene 中一个索引是放在一个文件夹中的。同一文件夹中的所有的文件构成一个 Lucene 索引.
  • 段(Segment)一个索引可以包含多个段,段与段之间是独立的,添加新文档可以生成新的段,不 同的段可以合并。具有相同前缀文件的属同一个段,图中共两个段 "_0" 和 "_1"。segments.gen 和 segments_5 是段的元数据文件,也即它们保存了段的属性信息。
  • 文档(Document)文档是我们建索引的基本单位,不同的文档是保存在不同的段中的,一个段可以包含多篇文档。新添加的文档是单独保存在一个新生成的段中,随着段的合并,不同的文档合并到同一个段中.
  • 域(Field)一篇文档包不同类型的信息,可以分开索引,比如标题,时间,正文,作者等, 都可以保存在不同的域里。不同域的索引方式可以不同,在真正解析域的存储的时候,我们会详细解读。
  • 词(Term)词是索引的最小单位,是经过词法分析和语言处理后的字符串。

从上图我们可以看到这么几个文件,

_0.tis、_0.tti 这两个文件是词典信息文档,其中前面的数字是对应索引中的段。

_0.frq 这个文件是词典id和文档id一个映射,我们把它称作为倒排列表。

_0.prx 这个文件保存的是倒排列表中每个词在文档中的位置信息,主要用来支持短语搜索等其他搜索。

这里可以看出倒排索引的结构就是词典加倒排列表

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

欢迎 发表评论:

最近发表
标签列表