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

在术语聚合中附加更多聚合

饶承宣
2023-03-14

抱歉,如果已经问过了,但一直潜伏在SO周围,找不到任何适合我需要的东西。

基本上,我在使用ES的第一次快速尝试中试图实现的是在术语聚合中添加更多计数器。

快速尝试一下,我将以下请求发送给ES。

POST http://localhost:9200/people/_search

{
    "size": 0,
    "aggs": {
        "agg_by_name": {
            "terms": { "field": "name"}
        }
    }
}

我现在得到的只是样本在文档中显示的内容。

{
    "took": 89,
    "timed_out": false,
    "_shards": {
        "total": 1,
        "successful": 1,
        "skipped": 0,
        "failed": 0
    },
    "hits": {
        "total": {
            "value": 10000,
            "relation": "gte"
        },
        "max_score": null,
        "hits": []
    },
    "aggregations": {
        "agg_by_name": {
            "doc_count_error_upper_bound": 0,
            "sum_other_doc_count": 9837,
            "buckets": [
                {
                    "key": "James",
                    "doc_count": 437
                },
                {
                    "key": "Eduard",
                    "doc_count": 367
                },
                {
                    "key": "Leonardo",
                    "doc_count": 235
                },
                {
                    "key": "George",
                    "doc_count": 209
                },
                {
                    "key": "Harrison",
                    "doc_count": 180
                }, ...

但是,我真的不知道如何在桶中包含更多的内部聚合。会导致这样的文档的东西。

                {
                    "key": "Harrison",
                    "doc_count": 180,
                    "lives_in_NY": 40,
                    "lives_in_CA": 140,
                    "distinct_surnames": [ ... ]
                }

我应该如何构造聚合,以便按桶包含这些聚合?

共有1个答案

东方弘壮
2023-03-14

你可以试试这样的东西:

  {
  "size": 0,
  "aggs": {
    "getAllTheNames": {
      "terms": {
        "field": "name",
        "size": 100
      },
      "aggs": {
        "getAllTheSurnames": {
          "terms": {
            "field": "surname",
            "size": 100
          }
        }
      }
    }
  }
}

对于居住城市来说,可以是这样的:

  {
  "size": 0,
  "aggs": {
    "getAllTheNames": {
      "terms": {
        "field": "name",
        "size": 100
      },
      "aggs": {
        "getAllTheCities": {
          "terms": {
            "field": "city",
            "size": 100
          }
        }
      }
    }
  }
}
 类似资料:
  • 问题内容: 我正在尝试使用以下查询对以下数据进行elasticsearch来执行术语聚合,输出将名称分解为标记(请参见下面的输出)。因此,我尝试将os_name映射为multi_field,但现在无法通过它查询。是否可以有没有令牌的索引?例如“ Fedora Core”? 查询: 数据: 输出: 映射: 问题答案: 实际上,您应该像这样更改映射 并且您的aggs应该更改为:

  • 我们目前正在开发一个多语言文档CMS。因此,我们有翻译成不同语言的文件。 对于使用Elasticsearch进行搜索,我们目前使用每种语言(德语、英语、法语……)一个索引,其中同一文档的所有翻译共享相同的ID。 当用户搜索特定术语时,我们希望在所有语言中搜索,但只返回不同ID的列表。据我所知,只有使用以下术语聚合才能做到这一点: 这很好,但是作为弹性搜索文档https://www.elastic.

  • 以下是数据集的快照: 我想获得员工名单以及employeeStatus和employeeAddr。 所以我在employeeId上使用术语聚合,然后使用employeeStatus和employeeAddr的子聚合来获得这些详细信息。下面的查询正确返回结果。 现在我只想要永久身份的员工。所以我正在应用过滤器聚合。 现在的问题是雇员地址聚合没有为雇员地址返回存储桶,因为记录2在聚合完成之前就被过滤掉

  • 问题内容: 我有两种日志消息: 第一个消息是已发送消息的类型,第二个消息是确认消息已传递的消息。 它们之间的区别是后缀,我已将其与“ id”分开并可以对其进行查询。 这些消息将按以下格式解析并存储在elasticsearch中: 我想找出哪些消息已成功发送,哪些没有成功。我是Elasticsearch的初学者,所以我真的很努力。 我目前正在尝试术语聚合,但是我所能实现的就是以下代码: 向我显示已发

  • 我有一个存储字符串数组的字段。不同的文档包含不同的字符串集。 现在,我使用这个聚合查询来分析每个文件类型的使用情况。 结果与预期一致。但最近我在删除XML文件支持后更新了此字段。因此,文档的non具有文件类型XML。我可以从这个查询中确认这一点。 总命中计数为零。奇怪的是,当我再次执行上述聚合查询时,我仍然可以将XML视为一个术语。doc count为零。 如果这个XML术语在任何文档中都不存在,

  • 我想知道如何在Elasticsearch中使用聚合时获得具有最高doc_count的存储桶。我正在使用Kibana示例数据kibana_sample_data_flights: 如果有一个存储桶具有最大文档计数,我可以将术语聚合的大小设置为1,但是如果有两个存储桶具有相同的最大文档计数,则这不起作用。 自从我涉足管道聚合以来,我觉得应该有一种简单的方法来实现这一点。最大桶聚合似乎能够处理多个最大桶