Elasticsearch:如何在搜索时得到精确的总 hits 数

在Elasticsearch7.0及以后版本中,为了提升搜索效率,默认返回的hits数量可能不完全准确,最大限制为10000条。本文介绍如何通过设置track_total_hits参数获取实际的文档总数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

从 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,那么我们可以看到在返回的参数中,它正确地显示了所有满足条件的文档个数。

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值