再继续之前,我们将绕过讨论一下在分布式环境中搜索是怎么执行的。这比我们在 分布式文档存储 章节讨论的基本的 增-删-改-查(CRUD)请求要复杂一些。

TIP

你可以根据兴趣阅读本章内容。你并不需要为了使用Elasticsearch而理解和记住所有的细节。

这章的阅读目的只为初步了解下工作原理,以便将来需要时可以及时找到这些只是,但是不要被细节所困扰。

一个CRUD操作只对单个文档进行处理,文档的唯一性由_index,_type和 routing values (通常默认是该文档的_id)的组合来确定。这表示我们确切的知道集群中那个分片含有此文档。

搜索需要一种更加复杂的执行模型因为我们不知道查询会命中哪些文档:这些文档you课鞥呢在集群的任何分片上。一个搜索请求必须询问我们关注的索引(index or indices)的所有分片的某个副本来确定他们是否含有任何匹配的文档。

但是找到所有的匹配文档仅仅完成事情的一半。在search 接口返回一个page 结果之前,多分片中的结果必须组合成单个排序列表。为此,搜索被执行成一个两阶段过程,我们称之为query then fetch。