Query-then-Fetch带来的性能问题

Query-then-Fetch带来的性能问题

Content #

Elasticsearch的搜索分为两个阶段:Query-then-Fetch。具体步骤如下:

  1. 在query阶段,Coordinating节点向其他节点发送查询请求。
  2. 每个节点会在被选中的分片上执行查询,然后将From+Size个排序后的文档Id 和排序值传递给Coordinating节点。
  3. 在fetch阶段,Coordinating节点对收到的数据重新排序。
  4. Coordinating节点再发请求,从各个相应节点的分片上取出文档的详细信息。

这种处理方法会带来什么样的性能问题?

  1. 每个分片上需要查询from+size个文档,Coordinating节点需要处理的文档数为:number_of_shards*(from+size)。
  2. 深度分页问题(为了查第100页,前99页的文档也要取出来算分。

From #