当前位置: 首页 > 知识库问答 >
问题:

Elasticsearch-过滤数据上的聚合

王宜
2023-03-14

我有一个返回一组文档(100)的查询。我想对这些应用一个聚合,因为这些是最相关的。当我尝试聚合时,它返回所有结果的聚合,而不是前100个结果的聚合。

{
  "size": 100,
  "sort": [
   {
    "_score": {
    "order": "desc"
    }
   }
],
"from": 0,
"query": {
 .......
 },
  "aggregations": {
    "category.category_id": {
      "nested": {
        "path": "category"
       },
    "aggregations": {
     "category.category_id": {
       "terms": {
         "field": "category.category_id",
         "size": 2,
         "order": {
           "_count": "desc"
         }
       }
     }
   }
 }
}
{
"took": 33,
"timed_out": false,
"_shards": {
 "total": 4,
 "successful": 4,
 "skipped": 0,
 "failed": 0
},
"hits": {
 "total": 1042,
 "max_score": 60,
 "hits": [...100 hits...]
},
"aggregations": {
 "category.category_id": {
  "doc_count": 5186,
  "category.category_id": {
   "doc_count_error_upper_bound": 0,
   "sum_other_doc_count": 196,
   "buckets": [
   {
     "key": 2,
     "doc_count": 1042
   },
   {
    "key": 2764,
    "doc_count": 272
   }
   ....
   ]
  }
 }
}
{
"took": 33,
"timed_out": false,
"_shards": {
 "total": 4,
 "successful": 4,
 "skipped": 0,
 "failed": 0
},
"hits": {
 "total": 1042,
 "max_score": 60,
 "hits": [...100 hits...]
},
"aggregations": {
 "category.category_id": {
  "doc_count": 100,
  "category.category_id": {
   "doc_count_error_upper_bound": 0,
   "sum_other_doc_count": x,
   "buckets": [
   {
     "key": 2,
     "doc_count": x (x< 100) (eg 37)
   },
   {
    "key": 2764,
    "doc_count": y (y <= 100 -x) (eg 10)
   }
   ....
   ]
  }
 }
}

共有1个答案

夹谷信鸿
2023-03-14

您可以使用elasticsearch文档中描述的筛选器聚合

{
    "aggs" : {
        "agg_name" : {
            "filter" : { //Add your query },
            "aggs" : {
               "terms": {
                       "field": "category.category_id",
                      "size": 2,
                    "order": {
                     "_count": "desc"
                      }
            }
        }
    }
}

如果需要,可以在第二个aggs中再添加一个聚合

 类似资料:
  • 问题内容: 我正在尝试对数组中的值进行聚合,并且还过滤由前缀返回的存储桶。不知道这是否可行,或者我滥用过滤桶。 3份文件: 目的是获取带有字母B开头颜色的文档数量: 不幸的是,返回的结果包括Red。显然是因为带有红色的文档仍然按过滤器匹配,因为它们也具有蓝色和/或黑色。 有没有一种方法可以只过滤存储桶结果? 问题答案: 尝试此操作,它将过滤为存储桶本身创建的值:

  • 问题内容: 我对Elasticsearch世界真的很陌生。 比方说,我有两个字段嵌套聚集:与: 这段代码可以完美地工作,并且给我这样的东西: 现在,我需要排除所有小于1000的聚合结果,而改为: 是否可以在查询正文中设置此需求?还是我必须在调用者布局中执行过滤器(在我的情况下为javascript)? 提前致谢 问题答案: 下次,M’sieur Toph’:RTFM! 我真的很傻:问了30秒后,我

  • 问题内容: 我要实现的目标:我不希望查询过滤器过滤“年龄”聚合,并且希望能够对其应用过滤器。 因此,如果我从以下查询开始: 我的聚合“ young_age”将同时被filter_1和filter_2过滤。我不希望我的汇总被filter_1过滤。 在查看文档时,我认为全局聚合可以解决我的问题,因此我编写了以下查询: 但是然后elasticsearch抱怨我的filter_2: “”“在[global

  • 不知道如何表达这个问题。我正在使用Elasticsearch 2.2。 让我们从数据集的一个示例开始,该数据集由5个文档组成: 被调用的\u实体始终具有uuid。coverage\u实体可以为空,也可以具有uuid。 我使用脚本在任何一个被调用的\实体上进行聚合。uuid或coverage\u实体。uuid: 现在,聚合已经从任一头生成了术语。调用了\u实体。uuid或标头。coverage\u实

  • 我有一个Elasticsearch文档索引,其中有一个包含URL列表的字段。如预期的那样,在该字段上聚合会给我唯一URL的计数。 然后,我想过滤掉其键不包含特定字符串的桶。我已经尝试使用Bucket选择器聚合来实现这一点。 此尝试: 失败原因: 名为[links\u key\u filter]且类型为[bucket\u selector]的管道聚合无效。顶层仅允许同级管道聚合 将bucket选择器

  • 问题内容: 我刚开始使用ElasticSearch几天,而作为一项学习练习,我实施了一个基本的工作搜寻器,该工作收集器汇总了一些求职网站上的工作,并在其中填充了一些数据供我使用。 我的索引包含每个列出职位的网站的文档。每个文档的一个属性是一个“作业”数组,其中包含该站点上存在的每个作业的对象。我正在考虑将每个作业作为自己的文档建立索引(特别是因为ElasticSearch文档说inner_hits