在继续之前,我们将绕道讨论一下在分布式环境中搜索是怎么执行的。 这比我们在 [distributed-docs] 章节讨论的基本的 增-删-改-查 (CRUD)请求要复杂一些。
内容提示
你可以根据兴趣阅读本章内容。你并不需要为了使用 Elasticsearch 而理解和记住所有的细节。
这章的阅读目的只为初步了解下工作原理,以便将来需要时可以及时找到这些知识, 但是不要被细节所困扰。
一个 CRUD 操作只对单个文档进行处理,文档的唯一性由 _index
, _type
,
和 routing
values (通常默认是该文档的 _id
)的组合来确定。
这表示我们确切的知道集群中哪个分片含有此文档。
搜索需要一种更加复杂的执行模型因为我们不知道查询会命中哪些文档: 这些文档有可能在集群的任何分片上。 一个搜索请求必须询问我们关注的索引(index or indices)的所有分片的某个副本来确定它们是否含有任何匹配的文档。
但是找到所有的匹配文档仅仅完成事情的一半。
在 search
接口返回一个 page
结果之前,多分片中的结果必须组合成单个排序列表。
为此,搜索被执行成一个两阶段过程,我们称之为 query then fetch 。