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

使用ElasticSearch的多度量子聚合情况

松嘉运
2023-03-14

我知道Elasticsearch支持带bucketing的子聚合(其中bucketing聚合可以有bucketing或metric子聚合)。使用度量聚合无法进行子聚合。也许这是有道理的,但这里是用例。

作为家长,我有术语聚合。并将另一个术语聚合作为它的子项。子术语具有类型为top\u hits的子聚合top\u hits是一个度量聚合,因此它不能接受任何子聚合。现在需要在混合中加入平均值。给定的top\u hits是聚合树中的最后一个聚合,不能将其作为子级,因为top\u hits是一个度量聚合。

以下是所需的聚合级别。(当然,这是无效的,因为top\u hits是一个度量聚合,而avg聚合也是如此。

{
  "aggregations": {
    "top_makes": {
      "terms": {
        "field": "make"
      },
      "aggregations": {
        "top_models": {
          "terms": {
            "field": "model"
          },
          "aggregations": {
            "top_res": {
              "top_hits": {
                "_source": {
                  "include": [
                    "model",
                    "color"
                  ]
                },
                "size": 10
              }
            }
          }
        }
      },
      "aggregations": {
        "avg_length": {
          "avg": {
            "field": "vlength"
          }
        }
      }
    }
  }
}

解决这个问题的变通方法或最佳方法是什么?


共有1个答案

公良鸿禧
2023-03-14

我想这会有用的,验证一下。。

{
  "aggregations": {
    "top_makes": {
      "terms": {
        "field": "make"
      },
      "aggregations": {
        "top_models": {
          "terms": {
            "field": "model"
          },
          "aggregations": {
            "top_res": {
              "top_hits": {
                "_source": {
                  "include": [
                    "model",
                    "color"
                  ]
                },
                "size": 10
              }
            }
          },
          "avg_length": {
            "avg": {
              "field": "vlength"
            }
          }
        }
      }
    }
  }
}

关键是您可以为父聚合拥有1个或多个兄弟姐妹(子聚合)。

 类似资料:
  • 我有3个级别的父/子结构。假设: 公司- 由于这里经常更新可用性(以及员工),所以我选择对嵌套使用父/子结构。搜索功能工作正常(所有文档都在正确的碎片中)。 现在我想对这些结果进行排序。按公司(第1级)的元数据对它们进行排序很容易。但我也需要按第3级(可用性)进行排序。 我想要按以下顺序排列的公司列表: 与给定ASC位置的距离 评级DESC 最快可用性ASC 例如: A公司距离我们5英里,评分为4

  • 我想在我的java应用程序中获得聚合。 首先,我用curl构造了REST查询。它看起来像: 结果和我预期的一样 之后我在java中创建了一些代码 问题是: 如何获取当前bucket项的“contract\u sum”聚合值? 当我在IntelliJ Idea中使用调试工具时,它似乎可以 请帮助我的代码示例。

  • 我在elasticsearch中有一个文档索引,每个文档有480个字段。我试图做的是搜索一个词(例如“Apple”),并获得所有其值与搜索词匹配的唯一字段名。所以如果我的文档是: 作为查询的结果,我希望得到如下所示的聚合: 由于每个文档都有480个字段,所以我更喜欢执行multi_match查询,而不是使用包含所有字段的筛选器: 这个查询在ElasticSearch中可能吗?

  • 我有一个描述容器的文档结构,它的一些字段是: 我想运行一个搜索聚合,该聚合在两个权重字段上有两个级别的术语聚合,但按权重字段的降序排列,如下所示: 样本文件: 预期输出(未完成): 但是,我不能按嵌套聚合排序。(错误:术语桶只能在子聚合器路径上排序,该子聚合器路径由路径中的零个或多个单桶聚合和最终的单桶或指标聚合构建...) 例如,对于上述示例输出,如果我在术语聚合上引入大小(如果我的数据很大,我

  • 框架集合由搜索查询选择的所有数据。框架中包含许多构建块,有助于构建复杂的数据描述或摘要。聚合的基本结构如下所示 - 有以下不同类型的聚合,每个都有自己的目的 - 指标聚合 这些聚合有助于从聚合文档的字段值计算矩阵,并且某些值可以从脚本生成。 数字矩阵或者是平均聚合的单值,或者是像一样的多值。 平均聚合 此聚合用于获取聚合文档中存在的任何数字字段的平均值。 例如, 请求正文 响应 如果该值不存在于一

  • 我正在尝试设置一个搜索查询,该查询应通过多级嵌套字段复合聚合集合,并从该集合中提供一些子聚合指标。我能够按预期使用其存储桶获取复合聚合,但所有存储桶的子聚合指标都带有。我不确定我是否未能正确指出子聚合应考虑哪些字段,或者它是否应放置在查询的不同部分中。 我的收藏看起来类似于以下内容: 贝娄,你可以找到我已经尝试了。尽管所有文档都有一个设置的点击值,但所有存储桶都带有点击总数。 到目前为止,我的回应