从 Elasticsearch 7.0之后,为了提高搜索的性能,在 hits 字段中返回的文档数有时不是最精确的数值。Elasticsearch 限制了最多的数值为10000。
{
"took" : 1,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 10000,
"relation" : "gte"
},
...
}
当文档的数值大于10000时,返回的 total 数值为10000,并在 relation 中指出 gte。
我们可以做如下的一个实验。启动 Kibana:
然后选中 “Add data”:
这样我们就把 Sample flight data 的数据加载到 Elasticsearch 中去了。
我们在 Dev tools 中来查询我们的文档个数:
我们可以看到有 13059 个数值。假如我们使用如下的方式来进行搜索的话:
显然我们得到的文档的数目是 10000 个,但是它并不是我们的实际的满足条件的所有文档数。假如我们想得到所有的文档数,那么我们可以做如下的方式:
我们在请求的参数中加入 track_total_hits,并设置为 true,那么我们可以看到在返回的参数中,它正确地显示了所有满足条件的文档个数。