ES的读取分为GET和Search两种操作,这两种读取操作有较大的差异,本章我们主要分析下GET/MGET读取操作。
GET/MGET必须指定三元组:_index、_type、_id(http://127.0.0.1:9200/_index/_type/_id),也就是说,根据文档id从正排索引中获取内容。
注:ElasticSearch中同时保存了正排索引和倒排索引,对该知识不清楚的可以参考:
GET基本流程
搜索和读取文档都属于读操作,可以从主分片或副分片中读取数据。
读取单个文档的流程(图片来自官网)可如下图:
注:其中P->primary shard(主分片),R->replication shard (副分片)
步骤如下:
(1)客户端向NODE1发送读请求(此时NODE1作为协调节点)
(2)NODE1是同文档ID来确定文档属于分片0,通过集群状态中的内容路由表信息获取分片0有三个副本数据,位于三个节点中,此时它可以通过将请求发送到任意节点,图上所示是将请求发送到NODE2。
(3)NODE2将文档返回给NODE1,NODE1将文档返回给客户端(