elasticsearch 5.x 系列之六 文档索引,更新,查询,删除流程

本贴最后更新于 2292 天前,其中的信息可能已经天翻地覆

一、elasticsearch index 索引流程

步骤:
客户端向 Node1 发送索引文档请求
Node1 根据文档 ID(_id 字段)计算出该文档应该属于 shard0,然后请求路由到 Node3 的 P0 分片上。
Node3 在 P0 上执行了请求。如果请求成功,则将请求并行的路由至 Node1,Node2 的 R0 上。当所有的 Replicas 报告成功后,Node3 向请求的 Node(Node1)发送成功报告,Node1 再报告至 Client。
当客户端收到执行成功后,操作已经在 Primary shard 和所有的 replica shards 上执行成功了
elasticsearch-写数据流程

二、 elasticsearch 数据读取流程

1.客户端发送 Get 请求到 NODE1。
2.接着 NODE1 使用文档的_id 决定文档属于 R0 分片,然后获取 R0 的所有副本的地址。这次,它将请求路由至 NODE2。
3.NODE2 将文档返回给 NODE1,NODE1 将文档返回给客户端。 对于读请求,请求节点(NODE1)将在每次请求到来时都选择一个不同的 replica。
shard 来达到负载均衡。使用轮询策略轮询问所有的 replica shards。
elasticsearch-取数据流程

三、 elasticsearch 数据更新流程

1.客户端发送更新操作请求至 NODE1
2.NODE1 将请求路由至 NODE3,Primary shard 所在的位置
3.NODE3 从 P0 读取文档,改变 source 字段的 JSON 内容,然后试图重新对修改后的数据在 P0 做索引。如果此时这个文档已经被其他的进程修改了,那么它将重新执行 3 步骤,这个过程如果超过了 retryon_conflict 设置的次数,就放弃。
4.如果 NODE3 成功更新了文档,它将并行的将新版本的文档同步到 NODE1 和 NODE2 的 replica shards 重新建立索引。一旦所有的 replica
shards 报告成功,NODE3 向被请求的节点(NODE1)返回成功,然后 NODE1 向客户端返回成功。

四、 elasticsearch 删除数据

(流程和数据索引类似,删除只是标记这个文档不可用,并不是立即删除)
客户端向 Node 1 发送删除请求。
节点使用文档的 _id 确定文档属于分片 0 。请求会被转发到 Node 3`,因为分片 0 的主分片目前被分配在 `Node 3 上。
Node 3 在主分片上面执行请求。如果成功了,它将请求并行转发到 Node 1 和 Node 2 的副本分片上。一旦所有的副本分片都报告成功, Node 3 将向协调节点报告成功,协调节点向客户端报告成功。
![](https://images2018.cnblogs.com/blog/1448990/201807/1448990-20180727115901745-1724662407.png)

  • Elasticsearch

    Elasticsearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful 接口。Elasticsearch 是用 Java 开发的,并作为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

    117 引用 • 99 回帖 • 223 关注
  • 索引
    23 引用 • 28 回帖
  • 更新
    7 引用 • 57 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...