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中的数据库,用于存放数据
类型相当于数据表,定义数据结构
文档就是一条数据

image

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

image

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 再同步给其他节点。

image

但数据的写入有一个简单的路由规则,可以 route 到集群中的任意节点(实际上是路由到对应主分片所在的节点),所以数据写入压力是分散在整个集群中的,不会都压在 master 上。

九、ELK 系统

Elasticsearch 除了做搜索引擎,还可以用做 ELK 系统(日志分析系统)。

  • E:Elasticsearch,负责存储和搜索日志
  • L:Logstash,日志收集系统,负责从各个业务系统采集日志
  • K:Kibana,数据可视化平台,负责把日志以图表的形式展现出来

image

流程是:Logstash 采集业务系统日志,存储到 ES 中,通过 Kibana 展现给运维人员。

ELK 系统的作用:系统运行过程中出现异常,在日志中就能及时反馈。日志进入 ELK 系统后,我们直接在 Kibana 就能看到日志情况。如果再接入一些实时计算模块,还能做实时报警功能。

十、总结

  • 反向索引又叫倒排索引,是根据文章内容中的关键字建立索引。
  • 搜索引擎原理就是建立反向索引。
  • Elasticsearch 在 Lucene 的基础上进行封装,实现了分布式搜索引擎。
  • Elasticsearch 中的索引、类型和文档的概念比较重要,类似于 MySQL 中的数据库、表和行。
  • Elasticsearch 也是 Master-slave 架构,也实现了数据的分片和备份。
  • Elasticsearch 一个典型应用就是 ELK 日志分析系统。
posted @ 2026-08-21 21:44  Jennifer_F  阅读(4)  评论(0)    收藏  举报