Content #
Elasticsearch的搜索分为两个阶段:Query-then-Fetch。具体步骤如下:
- 在query阶段,Coordinating节点向其他节点发送查询请求。
- 每个节点会在被选中的分片上执行查询,然后将From+Size个排序后的文档Id 和排序值传递给Coordinating节点。
- 在fetch阶段,Coordinating节点对收到的数据重新排序。
- Coordinating节点再发请求,从各个相应节点的分片上取出文档的详细信息。
这种处理方法会带来什么样的性能问题?
- 每个分片上需要查询from+size个文档,Coordinating节点需要处理的文档数为:number_of_shards*(from+size)。
- 深度分页问题(为了查第100页,前99页的文档也要取出来算分。