首页 > 解决方案 > 如何获取索引中的文档总数

问题描述

使用的库:https ://pkg.go.dev/github.com/olivere/elastic/v7

res, _ := orm.Es.Search("pk").Do(context.Background())
fmt.Println("res",res.TotalHits()) // output:10000

count: 3628800 查询的数字只有10000,怎么得到总数?

标签: goelasticsearch

解决方案


尝试将track_total_hits搜索选项设置为true.

通常,如果不访问所有匹配项,就无法准确计算总命中数,这对于匹配大量文档的查询来说代价高昂。track_total_hits parameter允许您控制应如何跟踪点击总数。鉴于通常具有命中数的下限就足够了,例如“至少有 10000 个命中”,因此默认设置为 10,000。这意味着请求将准确计算总命中数,最高可达 10,000 次命中。如果您在某个阈值之后不需要准确的命中数,那么加快搜索速度是一个很好的权衡。

设置为 true 时,搜索响应将始终跟踪准确匹配查询的命中数

官方文档中有一篇很棒的文章描述了它是什么。

通过调用TrackTotalHits方法在您的代码中启用它:

res, _ := orm.Es.Search("pk").TrackTotalHits(true).Do(context.Background())

或者,如果您只需要总数,只需使用Count API

res, _ := orm.Es.Count("pk").Do(context.Background())

推荐阅读