中间件,我给它的定义就是为了实现某系业务功能依赖的软件,包括如下部分:
Web服务器
代理服务器
ZooKeeper
Kafka
RabbitMQ
Hadoop HDFS
Elasticsearch ES (本章节)
前面几个小节我们介绍的都是ES的实际操作,今天我们来讲讲关于ES底层技术之一:倒排索引 (Inverted Index)。
讲解倒排索引之前我们需要先了解什么是正排索引(Forward Index), 正排索引,它以文档为中心存储原始内容,是数据库、搜索引擎和大数据系统中实现高效数据检索的关键组件。
正排索引是以文档(Document)为中心的索引结构。它记录的是:每个文档中包含了哪些内容。假设有以下三篇文档:
那么正排索引的结构看起来像这样:
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进行进行搜索。所以在搜索内容的是倒排索引效率会更高。