使用olivere/elastic v7查询ES索引总文档数,TotalHits返回10000如何取真实总数
获取Elasticsearch真实总文档数(olivere/elastic v7)
你遇到的这个问题是Elasticsearch的默认行为导致的:当匹配的文档总数超过10000时,ES会默认截断总命中数,返回10000作为近似值,这是出于性能优化的考虑——计算超大数据集的精确总数会消耗更多资源。
要获取真实的总文档数,你只需要在Search请求中开启track_total_hits参数,对应的olivere/elastic v7库方法是TrackTotalHits():
// 修改你的查询代码,添加TrackTotalHits(true) res, err := orm.Es.Search("pk"). TrackTotalHits(true). // 强制ES计算精确的总文档数 Do(context.Background()) // 之后调用TotalHits()就能拿到真实数值了 total := res.TotalHits()
补充说明:
- 如果你的索引文档量极大,担心精确统计影响性能,也可以设置一个具体的阈值,比如
TrackTotalHits(4000000)——当总文档数不超过这个阈值时返回精确值,超过则返回近似值。不过对于你当前的3628800文档量,直接设为true完全没问题。 - 实际代码里建议不要忽略错误处理,把原来的
_换成err并做检查,避免潜在问题。
内容的提问来源于stack exchange,提问作者user1295679
相关产品推荐
相关产品推荐

