ES简介
ES是一个开源分布式搜索和分析引擎,它建立在Lucene库之上,是一个全文搜索引擎,可以快速地从海量数据中搜索和查询。
ES是强大,灵活和高性能的搜索和分析引擎,底层使用分布式架构和Lucene库来处理和存储数据,并且隐藏了 lucene 的复杂性,提供了简单易用的 RESTful api提供给用户。
ES 的分布式架构设计
ES的设计理念就是分布式搜索引擎,底层基于lucene。通过启动ES多个实例形成一个集群
分布式的情况下可以把一个index分成多个shard,每个shard存放部分数据,这样可以提高性能,数据分到多个shard,请求可以分布式进行,每个shard有一个primary shard和多个replica shard,写请求会打到primary上,primary会把数据同步给replica,primary挂掉,其中一个replica会重新成为primary,保证高可用
es写入工作原理
客户端发送请求到coordinate node(协调节点)中,coordinate node通过document_id的hash值路由到对应的node中,由primary处理,处理完成之后同步给replica,同步完成后primary返回给coordinate node,coordinate node响应结果给客户端
node在写入数据的时候先写入内存 buffer,然后每隔 1s,将数据 refresh 到 os cache,到了 os cache
数据就能被搜索到(所以 es 从写入到能被搜索到,中间有 1s 的延迟,es是准时的)。每隔 5s,将数据写入 translog 文件(这样如果机器宕机,内存数据全没,最多会有 5s 的数据丢失),
translog 大到一定程度,或者默认每隔 30mins,会触发 commit 操作,将缓冲区的数据都 flush
到 segment file 磁盘文件中。
es读取工作原理
可以通过doc id查询,客户端发送请求到任意节点,节点通过doc id进行hash,判断doc id分配到哪一个shard中,然后使用随机轮询算法,在primary和replica中选择一个,接收到请求的node返回数据给协调节点
写请求是写入 primary shard,然后同步给所有的 replica shard;读请求可以从 primary
shard 或 replica shard 读取,采用的是随机轮询算法。
es搜索原理
- 客户端发送请求到coordinate node
- coordinate node发送请求到所有的shard
- 每个shard都会返回结果给coordinate node,coordinate node整合,汇总,排序数据响应给客户端
注意:如果是分页查询,每一个shard都会返回全量的数据给coordinate node,由coordinate node整合,排序后把第n页数据响应给客户端,所以ES分页查询效率较低,ES自动设置了分页查询的时候,超过第n页,会抛出异常给客户端
es搜索中倒排索引原理
在ES中,每一个doment都有对应的docment ID,文档内容被表示成一组关键词的集合,一个docment在分词器进行分词之后会被分成n个单词,每个关键词都会记录他在文档中出现的次数和位置,
索引是以ID为索引进行排序搜索,倒排索引就是以单词为索引进行排序搜索,以下是一个简单示例(实际上倒排索引的数据结构不只是Word和Docment ID List,其余不展开 ):
| docment ID | content |
|---|---|
| 1 | 北京清汤火锅好吃 |
| 2 | 成都火锅好吃 |
对文档进行分词之后,得到以下倒排索引。
| WordId | Word | Docment ID List |
|---|---|---|
| 1 | 北京 | 1 |
| 2 | 清汤 | 1 |
| 3 | 火锅 | 1,2 |
| 4 | 好吃 | 1,2 |
| 5 | 成都 | 2 |
有了倒排索引之后,用户请求比如火锅时,node就可以查询倒排索引,查到包含这个单词的文档,把文档集合返回给用户
ES 在数据量很大的情况下如何提高查询效率
es 的搜索引擎严重依赖于底层的 filesystem cache ,你如果给 filesystem cache 更多的内存,尽量让内存可以容纳所有的 idx segment file 索引数据文件,那么你搜索的时候就基本都是走内存的,性能会非常高
冷热分离:把冷热数据放到不同的节点中
数据预热:提前访问热点数据,将热点数据加载到内存中
ES(Elasticsearch)相关文献
ES官方网站:https://www.elastic.co
ES社区官方网址: https://www.elastic.co/community
ES独立的社区网站 https://discuss.elastic.co/,其中包括ES用户和开发人员的论坛和讨论
elasticSearch-权威指南-中文版:https://www.elastic.co/guide/cn/elasticsearch/guide/current/foreword_id.html
权威指南GitHub 仓库:https://github.com/elastic/elasticsearch-definitive-guide/
Kibana 用户手册:https://www.elastic.co/guide/cn/kibana/current/index.html
elasticSearch-中文社区:https://elasticsearch.cn/
elasticSearch-参考手册-api:https://www.elastic.co/guide/index.html
elasticSearch-客户端-api:https://www.elastic.co/guide/en/elasticsearch/client/index.html
本文介绍了ES,一个基于Lucene的开源搜索引擎,其分布式架构、工作原理(包括写入和读取机制)、搜索原理以及如何通过内存缓存、冷热分离和数据预热提高查询效率。同时提到了相关资源链接。
2541

被折叠的 条评论
为什么被折叠?



