【问题标题】:Is it possible to sort buckets in Terms aggregation response on a non-term field?是否可以在非术语字段的术语聚合响应中对存储桶进行排序?
【发布时间】:2015-07-31 04:21:27
【问题描述】:

我需要对 ElasticSearch 条款聚合结果中的存储桶进行排序。 下面是 ElasticSearch 中的索引记录之一

{"personId":"10","Salary":10000, "Age":20, "personName":"xyz"}

我正在对字段 Salary 使用术语聚合。以下是条款聚合的 ElasticSearch 查询:

{
    "aggs" : {
        "genders" : {
            "terms" : {
                "field" : "Salary"
            }
        }
    }
}

此查询根据薪水值返回存储桶。这些存储桶可以使用以下查询的顺序对 Salary 值进行排序:

{
    "aggs" : {
        "genders" : {
            "terms" : {
                "field" : "gender",
                "order" : { "_term" : "asc" }
            }
        }
    }
}

但是我需要在任何字段Age(非术语字段)上对存储桶进行排序,有什么办法吗?

【问题讨论】:

  • 你能告诉我们你正在使用的映射吗?
  • 请添加一个具有预期结果的具体示例,以明确您的问题。

标签: elasticsearch aggregation


【解决方案1】:

聚合的重点是将文档“分派”到存储桶中,每个存储桶都由 terms 聚合的声明字段定义,在您的情况下为 Salary

您在响应中获得的存储桶不再是文档。例如,在存储桶 10000 中,您将获得具有 Salary: 10000 的文档的计数,并且您将拥有与所有文档中不同的 Salary 值一样多的存储桶(默认情况下只有 10 个存储桶, 尽管)。

因此,由于存储桶不是文档,而且存储桶可以聚合具有不同 Age 值的文档,因此不清楚您希望 Salary 存储桶如何按 Age 排序。

也许,解决此问题的一种方法是在 Age 字段上添加一个 terms 子聚合,这样您就可以得到顶部的 Salary 存储桶,而在其下方则是 Age 存储桶。然后,您可以随意对您的 Salary/Age 存储桶对进行排序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-27
    • 1970-01-01
    • 1970-01-01
    • 2021-06-06
    • 1970-01-01
    • 2019-10-31
    • 2015-11-06
    • 2021-06-06
    相关资源
    最近更新 更多