经过查询发现有段描述:
就是只会返回top结果, 部分结果不响应返回
那如何让这部分结果返回呢?
带着问题, 发现使用桶聚合,默认会根据doc_count 降序排序,同时默认只返回10条聚合结果....AggregationBuilders.terms("group_by_topics")
.field("topic").size(100);
我们解决了问题, 现在思考下ES为什么不一下子返回所有统计项的结果数据呢...答案是由ES聚合机制决定, ES怎么聚合呢
接受客户端的节点是协调节点
协调节点上,搜索任务会被分解成两个阶段: query和fetch
真正搜索或聚合任务的节点为数据节点,如图 2, 3, 4
聚合步骤...:
客户端发请求到协调节点
协调节点将请求推送到各数据节点
各数据节点指定分片参与数据汇集工作
协调节点进行总结果汇聚
es 出于效率和性能原因等,聚合的结果其实是不精确的.什么意思?...以我们上面遇到的场景为例:
默认返回top 10 聚合结果, 首先在各节点分片取自己的topic 10 返回给协调节点,然后协调节点进行汇总. 这样就会导致全量的实际聚合结果跟预期的不一致.