elsaticsearch的机制
以电影关键词为线索,讲述 Elasticsearch 的机制
一、什么是正向索引?什么是反向索引?
正向索引(正排索引):以"电影"为 key,电影的关键词为 value。
比如打开一部电影的详情页,就能看到这部电影的标签:《音乐之声》→ ["音乐", "爱情", "经典"]。
你能知道"这部电影有哪些标签",但你不知道"音乐这个标签下有哪些电影"。所以如果想找所有音乐题材的电影,需要一部一部翻详情页,看有没有"音乐"这个标签。
反向索引(倒排索引):以"关键词"为 key,包含这个关键词的电影列表为 value。
就像豆瓣的标签页,你点"音乐"标签,直接列出所有带这个标签的电影:"音乐" → [《音乐之声》, 《海上钢琴师》, 《爱乐之城》...]。
这样当提到"音乐"的时候,就能立刻想到具体的电影名字。想找音乐类电影,直接查这个列表。
一句话总结:正向索引是"从电影找标签",反向索引是"从标签找电影"。 搜索引擎要的就是后者。
二、倒排索引的问题:索引量爆炸
倒排索引快归快,但有一个问题——需要记的东西太多了。
假设豆瓣有 10 万部电影,每部电影平均有 20 个标签:
- 正向索引:存 10 万条记录(每部电影对应它的标签列表)
- 倒排索引:要存 200 万条关系(每个标签对应哪些电影),而且一个标签可能关联几千部电影
如果不是用"标签",而是用电影简介里的每一个词来建索引呢?一部电影简介 200 字,10 万部电影,倒排索引可能要记录几千万甚至上亿条"词→电影"的映射。
三、解决方案:倒排索引的数据压缩
ES 的解法是给索引本身再做一次"压缩打包"。
就像通讯录里把所有姓张的人归到一起,"张"字只写一次,后面挂着"三、伟、敏、磊"。ES 用 FST(有限状态转换器)把共享前缀的词合并,比如 "music"、"musical"、"musician" 共享前缀 "musi",只存一次。
四、搜索引擎
搜索引擎的核心其实就是建立倒排索引
搜索引擎的工作流程,核心是三步:
爬取数据-> 进行分词-> 建立索引
其中最核心的就是第三步——建立倒排索引。
五、Elasticsearch 是什么?
Elasticsearch 把对搜索引擎的操作封装成 RESTful API,通过 HTTP 请求进行操作。
考虑到海量数据的场景,它实现了分布式,是一个可以存储海量数据的分布式搜索引擎。
底层基于 Lucene,在 Lucene 的基础上做了封装和分布式扩展。
六、Elasticsearch 的基本概念
Elasticsearch的索引相当于MySQL中的数据库,用于存放数据
类型相当于数据表,定义数据结构
文档就是一条数据

那么数据是怎么存到 Elasticsearch 里的?
先创建索引,再创建类型,类型里通过 mapping 定义每个字段的类型。

keyword 和 text 的区别
这是 ES 里非常重要的一个知识点:
- keyword 类型:不会分词,直接根据字符串完整内容建立倒排索引。适合存精确值,比如邮箱、标签、状态码。
- text 类型:存入 ES 的时候会先分词,再根据分词后的内容建立倒排索引。适合存全文内容,比如文章标题、正文。
举个例子:"我爱北京天安门" 用 keyword 存,就是一个完整的词,必须搜完整的"我爱北京天安门"才能搜到;用 text 存,会被分成"我"、"爱"、"北京"、"天安门",搜"北京"也能搜到这条数据。
七、怎么在 Elasticsearch 里创建索引?
给 Elasticsearch 发送 HTTP 请求就行,比如用 PUT 请求创建一个索引:
PUT /my_index
ES 的所有操作都可以通过 HTTP 请求完成,非常方便。
八、Elasticsearch 分布式原理
Elasticsearch 会对数据进行切分(分片),且每个分片都会保存多个副本,保证了分布式环境的高可用。
Elasticsearch 也是 master-slave 架构。创建索引、定义 mapping 这类元数据操作需要经过 master 节点,master 再同步给其他节点。

但数据的写入有一个简单的路由规则,可以 route 到集群中的任意节点(实际上是路由到对应主分片所在的节点),所以数据写入压力是分散在整个集群中的,不会都压在 master 上。
九、ELK 系统
Elasticsearch 除了做搜索引擎,还可以用做 ELK 系统(日志分析系统)。
- E:Elasticsearch,负责存储和搜索日志
- L:Logstash,日志收集系统,负责从各个业务系统采集日志
- K:Kibana,数据可视化平台,负责把日志以图表的形式展现出来

流程是:Logstash 采集业务系统日志,存储到 ES 中,通过 Kibana 展现给运维人员。
ELK 系统的作用:系统运行过程中出现异常,在日志中就能及时反馈。日志进入 ELK 系统后,我们直接在 Kibana 就能看到日志情况。如果再接入一些实时计算模块,还能做实时报警功能。
十、总结
- 反向索引又叫倒排索引,是根据文章内容中的关键字建立索引。
- 搜索引擎原理就是建立反向索引。
- Elasticsearch 在 Lucene 的基础上进行封装,实现了分布式搜索引擎。
- Elasticsearch 中的索引、类型和文档的概念比较重要,类似于 MySQL 中的数据库、表和行。
- Elasticsearch 也是 Master-slave 架构,也实现了数据的分片和备份。
- Elasticsearch 一个典型应用就是 ELK 日志分析系统。

浙公网安备 33010602011771号