排查思路
首先要明确我们数据的写入流程, 下图:
在检查Mysql库的数据没有问题之后,开始检查ES是否有问题,根据现象我们知道既然在全文检索中都能搜索到,说明数据肯定是写入ES里了,但是又如何确定聚合结果呢...经过查询发现有段描述:
就是只会返回top结果, 部分结果不响应返回
那如何让这部分结果返回呢?
带着问题, 发现使用桶聚合,默认会根据doc_count 降序排序,同时默认只返回10条聚合结果....1
},
{
"key" : 241,
"doc_count" : 1
}
]
}
把ES所有的筛选项数据都统计返回来...AggregationBuilders.terms("group_by_topics")
.field("topic").size(100);
我们解决了问题, 现在思考下ES为什么不一下子返回所有统计项的结果数据呢...以我们上面遇到的场景为例:
默认返回top 10 聚合结果, 首先在各节点分片取自己的topic 10 返回给协调节点,然后协调节点进行汇总. 这样就会导致全量的实际聚合结果跟预期的不一致.