怎么又是你

关于es排序的疑问?

Elasticsearch | 作者 ZhangChHao | 发布于2020年10月16日 | 阅读数:1576

背景:有一个百万级数据量的index,有5个分片。
问题:现在需要对数据进行function score,然后根据_score倒序,最后执行分页操作。那么进行排序这一步操作是先在每个分片上执行排序得到结果后再统一返回给协调节点,由协调节点进行汇总排序后再返回给客户端吗?
如果是的话那么全量排序一次岂不是需要返回百万的数据给到协调节点吗?
已邀请:

Ombres

赞同来自:

类似这样一个过程,每个节点取score排序的top n,然后汇总到协调节点,再按照score取top n,最终返回给客户端

zmc - ES PAAS、JuiceFS

赞同来自:

如果是一般的query_then_fetch查询的话不会有百万的数据返回到协调节点,只会在各个分片自己排序,返回相应查询结果的数量(只返回_docId和score)到协调节点,再在协调节点进行整体的排序,然后取到最终的_docId列表,再在其他分片上进行回查,拿到所有数据,再返回给客户端;
 
所以基于以上的逻辑,会产生排序结果不一致、结果震荡等问题...

ZhangChHao

赞同来自:

感谢楼上两位大佬

FFFrp

赞同来自:

用dfs_query_then_fetch保证相关性打分一致

要回复问题请先登录注册