作者介绍:简历上没有一个精通的运维工程师。请点击上方的蓝色《运维小路》关注我,下面的思维导图也是预计更新的内容和当前进度(不定时更新)。
中间件,我给它的定义就是为了实现某系业务功能依赖的软件,包括如下部分:
Web服务器
代理服务器
ZooKeeper
Kafka
RabbitMQ
Hadoop HDFS
Elasticsearch ES (本章节)
前面几个小节我们介绍的都是ES的实际操作,今天我们来讲讲关于ES底层技术之一:倒排索引 (Inverted Index)。
讲解倒排索引之前我们需要先了解什么是正排索引(Forward Index),** 正排索引,它以文档为中心存储原始内容,是数据库、搜索引擎和大数据系统中实现高效数据检索的关键组件。**
- 正排索引 → 书籍前面的页码目录(通过页码直接定位到内容),实际上他并不算严格意义的正排索引,因为通过ID或者页面实际上利用的是主键索引。真正的查询是属于内容进行查询,所以他需要进行全表扫描。
正排索引是以文档(Document)为中心的索引结构。它记录的是:每个文档中包含了哪些内容。假设有以下三篇文档:
- Doc1: "apple banana"
- Doc2: "banana cherry"
- Doc3: "apple cherry date"
那么正排索引的结构看起来像这样:
ID
内容
1
apple banana
2
banana cherry
3
apple cherry date
从文档 → 单词(内容)类似于你写日记时,每篇日记记录当天发生了什么想要查找“哪些文档包含 apple”,就必须逐篇扫描所有文档内容,效率很低。
倒排索引是以单词(Term)为中心的索引结构。它记录的是:每个单词出现在哪些文档中。
继续上面的例子,构建倒排索引如下:
单词
出现的文档ID列表
apple
[1, 3]
banana
[1, 2]
cherry
[2, 3]
date
[3]
从单词 → 文档列表想找“包含 apple 的文档”?直接查表,瞬间得到 Doc1 和 Doc3极大提升关键词检索速度,是搜索引擎的核心技术之一。
虽然每篇文字都有编号或者ID,但是当我们实际搜索的都是使用内容进行搜索,而非使用ID进行进行搜索。所以在搜索内容的是倒排索引效率会更高。
运维小路
一个不会开发的运维!一个要学开发的运维!一个学不会开发的运维!欢迎大家骚扰的运维!
关注微信公众号《运维小路》获取更多内容。