搜索与分析引擎——Elasticsearch知识点总结

首先,Elasticsearch官网有完成的知识点讲解,读者可以自行深入学习——《Elasticsearch: 权威指南》。下面是我总结的部分知识点。


一、近实时搜索
  • 官方文档:《近实时搜索》、《持久化变更》
  • 概述:用户写入一条数据后,该数据不会被立即搜索到,但默认不超过1s会被搜索到,所以称为近实时搜索。
  • 原理:
  1. 一个文档被索引(用户新增数据)之后,会首先进入“内存缓冲区”,并同时追加到事务日志里(此时不能被搜索);
  2. 默认每隔1s进行refresh操作:文档被写入到一个新的段,此时从“内存缓冲区”写入到“文件系统缓存”,“文件系统缓存”里的文档可以被搜索到,“内存缓冲区”的文档被清空,但事务日志不变(所以是“近实时搜索”);
  3. 当事务日志太大或默认每隔30min,进行一次完整的flush:所有数据写入到磁盘里,并删除事务日志。
    这是索引一个文档的普通流程。为了避免意外宕机导致未写入磁盘的数据丢失,新增如下步骤:
  4. 事务日志里存了所有未被写入磁盘里的操作记录,默认每隔5s,将事务日志内容刷新到磁盘;
  5. 重启服务时,Elasticsearch会重放事务日志里的操作,这就可以避免意外宕机导致未写入磁盘的数据丢失。
    用户可以修改上述提到的所有默认时间
二、路由一个文档到分片
  • 官方文档:《路由一个文档到分片》、《新建、索引和删除文档》
  • 概述:不同的文档会被路由到不同的分片,每组分片包含主分片和副本分片,它们的数据完全一样。
  • 原理:
  1. 协调节点收到索引一个文档的请求时,默认根据文档的_id生成hash数,然后除以主分片的数量的余数就是具体的分片;
  2. 协调节点将请求转发到对应的主分片上;
  3. 主分片上执行成功后,将请求并行转发副本分片上;
  4. 副本分片执行完成后,主分片向协调节点报告成功;
  5. 协调节点返回成功消息给客户端。
三、搜索一个文档
  • 官方文档:《取回一个文档》
  • 概述:向任意一个节点发起请求,搜索任意一个文档。
  • 原理:
  1. 客户端向任意节点(协调节点)发送获取请求;
  2. 节点根据文档的 _id来确定文档属于分片 A 。轮询访问主分片和副本分片中的其中一个分片A1;
  3. 分片A1将文档返回给协调节点,然后将文档返回给客户端。
四、分布式搜索
  • 官方文档:《执行分布式搜索》
  • 概述:Es从分布式集群中整合查询结果,返回给客户端。
  • 原理
  1. 协调节点将搜索请求转发到各个分片的某个主分片或副本分片;
  2. 每个分片在本地执行查询并添加结果到大小为 from + size 的本地有序优先队列中;
  3. 每个分片返回各自优先队列中所有文档的 ID 和任何排序需要用到的值给协调节点;
  4. 协调节点合并搜索结果,然后进行全局排序,得到最后的有序文档_id队列;
  5. 协调节点向相关的分片提交GET请求;
  6. 每个分片加载并丰富文档(如果有需要的话),接着返回文档给协调节点;
  7. 一旦协调节点接收到所有的结果文档,它就组装这些结果为单个响应返回给客户端。
五、倒排索引
  • 官方文档:《倒排索引》
  • 概述:文档本身的索引是:文档_id-->文档内容,倒排索引是:所有文档内容里的各个关键字(经过部分文字分析算法)-->文档_id,例如:
    文档1:The quick brown fox jumped over the lazy dog
    文档2:Quick brown foxes leap over lazy dogs in summer
Term Doc_1 Doc_2
brown X X
dog X X
fox X X
in X
jump X X
lazy X X
over X X
quick X X
summer X
the X

你可能感兴趣的:(搜索与分析引擎——Elasticsearch知识点总结)