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

两项聚合后的ElasticSearch顺序

翟凯
2023-03-14

假设我在ES中有以下文档,每个文档都有3个字段:f1、f2和分数。我想找到所有文档,按f1、f2分组,按组最大分数排序,在SQL我可以简单地这样做:

从表组中选择f1、f2、按f1、f2顺序按max(分数)评分

elasticsearch中的等价物是什么?嵌套术语聚合不会给出正确的顺序,因为返回的f2术语桶都嵌套在同一个f1术语桶中。

共有1个答案

督阿苏
2023-03-14

以下聚合应该有效

{
  "aggs": {
    "fileCombo": {
      "terms": {
        "script": "doc['field1'].value + doc['field2'].value",
        "order": {
          "maxScore": "desc"
        }
      },
      "aggs": {
        "maxScore": {
          "max": {
            "field": "score"
          }
        }
      }
    }
  }
}

第一个聚合基于field d1和field d2。下一个订单由max字段。

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

  • 在elasticsearch中,是否有方法使用自定义分数对聚合桶进行排序/排序? 我正在按客户姓名进行扣球。每个客户都有多个订单,其中有一个交货日期字段(DeliveDate)。我想根据与当前日期的距离(接近程度)对桶进行排序。 例如,对交货日期更接近今天日期的客户名进行排序。 非常感谢。

  • 问题内容: 我有这种结构的文档: 我想对FIELD2.SUBFIELDs中的数字总和的结果进行排序: 如果这样做,我将获得未排序的存储桶,但是我希望存储桶按“ a2”值进行排序。我该怎么做?谢谢! 问题答案: 你差点就吃了。你只需要一个添加属性到你的条件聚合,是这样的:

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

  • 问题内容: 目前,我正在按文档分数对汇总进行排序,因此大多数相关项在汇总列表中排在首位,如下所示: 我想在JSON中向订单条款订单数组添加另一个排序选项。但是当我这样做时: 第二种无效。例如,当所有分数均相等时,则应基于查询进行排序,但不起作用。 问题答案: 作为对安德烈(Andrei)回答…以多个条件排序聚合的更正,您 必须 创建一个如术语聚合:订单中所示的数组,并且 必须 使用ElasticS

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