首页 > 其他分享 >Elasticsearch:如何在搜索时得到精确的总 hits 数

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

时间:2024-12-31 14:22:53浏览次数:1  
标签:------------- hits 文档 track 搜索 Elasticsearch total

Elasticsearch:如何在搜索时得到精确的总 hits 数| Id | Title | DateAdded | SourceUrl | PostType | Body | BlogId | Description | DateUpdated | IsMarkdown | EntryName | CreatedTime | IsActive | AutoDesc | AccessPermission |

| -------------| -------------| -------------| -------------| -------------| -------------| -------------| -------------| -------------| -------------| -------------| -------------| -------------| -------------| -------------|
| 14360154| Elasticsearch:如何在搜索时得到精确的总 hits 数| 2021-02-02T08:02:00| | BlogPost|

 

从 Elasticsearch 7.0之后,为了提高搜索的性能,在 hits 字段中返回的文档数有时不是最精确的数值。Elasticsearch 限制了最多的数值为10000。

  1.   {
  2.   "took" : 1,
  3.   "timed_out" : false,
  4.   "_shards" : {
  5.   "total" : 1,
  6.   "successful" : 1,
  7.   "skipped" : 0,
  8.   "failed" : 0
  9.   },
  10.   "hits" : {
  11.   "total" : {
  12.   "value" : 10000,
  13.   "relation" : "gte"
  14.   },
  15.   ...
  16.   }

当文档的数值大于10000时,返回的 total 数值为10000,并在 relation 中指出 gte。

 

我们可以做如下的一个实验。启动Kibana:

然后选中“Add data”:

这样我们就把Sample flight data的数据加载到Elasticsearch中去了。

我们在Dev tools中来查询我们的文档个数:

我们可以看到有13059个数值。假如我们使用如下的方式来进行搜索的话:

显然我们得到的文档的数目是10000个,但是它并不是我们的实际的满足条件的所有文档数。假如我们想得到所有的文档数,那么我们可以做如下的方式:

我们在请求的参数中加入 track_total_hits,并设置为true,那么我们可以看到在返回的参数中,它正确地显示了所有满足条件的文档个数。

 

=========================================================================================================================

ElasticSearch Count API 和 track_total_hits 两者的区别是什么?

我想计算:某个查询条件(比如exists-query)下文档的总数,看了下ES官方文档:count api :


Gets the number of matches for a search query.


返回符合查询条件的文档数量,应该能满足需求。
但是,我又看到了另一个参数:track-total-hits,这里面提到:某个查询条件下的total hits是不准确的,因为它没有:visiting all matches。而 track_total_hits 提供了一个下界来保证 符合查询条件 的文档数量的准确性。


Generally the total hit count can't be computed accurately without visiting all matches, which is costly for queries that match lots of documents. The track_total_hits parameter allows you to control how the total number of hits should be tracked. 


我的疑问是:
count api 得到的 符合查询条件的文档 数量一定是准确的吧?如果是准确的话,那么它应该 visiting all matches了,那是不是说明:count api 是一个很耗时的操作吧?那么 我要计算:符合某个查询条件下的文档的准确数量时,使用 count api 好呢?还是 使用 track_total_hits 好呢?有什么坑要注意的么?
 
参考链接:Do not compute hit counts by default=

===========================================================================================================================================

es7.x在查询时,必须加上track_total_hits,不然就只显示10000

{
  "track_total_hits": true,
  "query": {
    "range": {
      "ts": {
        "gte": 0
      }
    }
  }
}

| 648658| | 2024-04-29T20:48:00| false| | 2021-02-02T08:02:08.88| true| 从 Elasticsearch 7.0之后,为了提高搜索的性能,在 hits 字段中返回的文档数有时不是最精确的数值。Elasticsearch 限制了最多的数值为10000。 { "took" : 1, "timed_out" : false, "_shards" : { "total" : 1,| Anonymous|

标签:-------------,hits,文档,track,搜索,Elasticsearch,total
From: https://www.cnblogs.com/ralphlauren/p/18621198

相关文章

  • Elasticsearch Unable to parse response body HTTP-1
    ElasticsearchUnabletoparseresponsebodyHTTP-1.1413RequestEntityTooLarge问题解决|Id|Title|DateAdded|SourceUrl|PostType|Body|BlogId|Description|DateUpdated|IsMarkdown|EntryName|CreatedTime|IsActive|AutoDesc|AccessPermissio......
  • elasticSearch Alternatively use a keyword field instead
    elasticSearchAlternativelyuseakeywordfieldinstead.|Id|Title|DateAdded|SourceUrl|PostType|Body|BlogId|Description|DateUpdated|IsMarkdown|EntryName|CreatedTime|IsActive|AutoDesc|AccessPermission||-------------|--------......
  • 81. 搜索旋转排序数组 II
    搜索旋转排序数组II已知存在一个按非降序排列的整数数组nums,数组中的值不必互不相同。在传递给函数之前,nums在预先未知的某个下标k(0<=k<nums.length)上进行了旋转,使数组变为[nums[k],nums[k+1],...,nums[n-1],nums[0],nums[1],...,nums[k-1]](下标从0开始......
  • 33. 搜索旋转排序数组
    搜索旋转排序数组整数数组nums按升序排列,数组中的值互不相同。在传递给函数之前,nums在预先未知的某个下标k(0<=k<nums.length)上进行了旋转,使数组变为[nums[k],nums[k+1],...,nums[n-1],nums[0],nums[1],...,nums[k-1]](下标从0开始计数)。例如,[0,1,2,4,5,6......
  • 使用 Azure Cosmos DB Mongo vCore 进行向量搜索的实战指南
    #AzureCosmosDBMongovCore实战指南:创建和查询向量搜索索引老铁们,今天我来给大家介绍如何利用AzureCosmosDB的MongovCore实现向量数据库功能。具体来说,我们要在集合中存储文档,创建索引,并使用近似最近邻算法(如余弦距离、欧几里得距离和内积)进行向量搜索查询。......
  • 腾讯 StereoCrafter:2D 视频转 3D 视频效果;支付宝推出新 AI 视觉搜索产品「探一下」丨
      开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(Real-TimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编辑......
  • 深入理解ElasticSearch与BM25: 实践与应用
    老铁们,今天我们来聊聊一个在搜索引擎领域备受关注的技术点——ElasticSearch中的BM25。说白了,这就是一个基于概率检索框架的文档排序算法,最初由StephenE.Robertson和KarenSpärckJones等高手在20世纪的70至80年代提出。BM25如今已成为许多搜索引擎的核心技术。技术背景......
  • 【详解】ElasticSearchQuery查询方式
    目录ElasticsearchQuery查询方式1.MatchQuery(匹配查询)2.TermQuery(精确查询)3.RangeQuery(范围查询)4.BoolQuery(布尔查询)5.其他查询方式结论ElasticsearchQuery查询方式Elasticsearch(ES)是一个基于Lucene的高性能、分布式、开源搜索引擎,提供了多种灵活的查询......
  • 黑客搜索引擎即相应语法
    黑客搜索引擎即相应语法1.Google部分语法:intext搜索包含指定字符的正文inurl搜索包含指定字符的urlintitle搜索包含指定字符的标题site搜包含关键字的站点filetype搜索指定文件类型2.渗透入系统1.爆破2.后台0day(只有自己知道的漏洞)1day(少数人知道的漏洞)nday(大多数人知......
  • Open Notebook:开源 AI 笔记工具,支持多种文件格式,自动转播客和生成总结,集成搜索引擎等
    ❤️如果你也关注AI的发展现状,且对AI应用开发非常感兴趣,我会每日跟你分享最新的AI资讯和开源应用,也会不定期分享自己的想法和开源实例,欢迎关注我哦!......