【问题标题】:Order Terms aggregations buckets by top hits sub aggregation订单条款聚合桶按热门点击子聚合
【发布时间】:2019-10-10 02:56:55
【问题描述】:

按点击次数最多的子聚合文档来源排序术语聚合存储桶

我有一个问题,

上下文: 这是一个旅游套餐索引,具有“set_url”属性之一,具有相同set_url的多个套餐称为家庭套餐。

要求: 按任何字段的排序顺序获取 seo 包可以说持续时间(索引为类型:整数),但排序将基于每个家庭的最低价格包,并希望结果大小为 20。

简单形式的问题陈述:假设通过 set_url 字段的术语聚合器产生 3 个桶 A、B、C,每个桶有 3 个包,(A1,A2,A3),(B1,B2 , B3) 和 (C1, C2, C3),现在首先我想从每个存储桶中计算最低定价包假设它是 A2、B3、C1 然后我想按相关最低定价包的持续时间字段对存储桶进行排序每个桶,即 A2、B3 和 C1 包。

我想做什么:

应用一些过滤器

在键 set_url 上应用术语顶级聚合,制作家庭包桶,现在我想根据来自热门点击聚合的最低价格家庭包订购这些桶,热门点击聚合是根据 ES 文档的度量聚合。

这些是热门类型的子聚合,它按升序对价格进行排序,并采用一种尺寸来挑选最低价格的家庭套餐。

当前查询:

{
   index: "seo_packages",
   type: "seo_package",
   body: {
   size: 0,
   query: {
     bool: {
       filter: {
         and: [{
                  terms: {
                    package_type: ["seo"]
                  }
               },
               {
                  terms: {
                    categories: ["tour"]
                  }
               },
               {
                 term: {
                   is_published: true
                 }
               },
             ],
        },
    }
},
aggs: {
  group_by_set_url: {
    terms: {
      field: "set_url",
      size: 10,
      order: {
        "min_price_expressions.how to access doc source property duration here" => "asc"
      }
    },
    aggs: {
      min_price_expressions: {
        top_hits: {
          sort: [{
            price_expression: {
              order: "asc"
            }
          }],
              _source: {
                includes: [: id,: duration]
              },
              size: 1
            },
          }
        }
      }
    }
  }
}

这里的order子句访问top hits子聚合文档的属性应该是什么?

提前致谢。

【问题讨论】:

  • 简单形式的问题陈述:假设术语聚合器产生 3 个桶 A、B、C,每个桶有 3 个包,(A1、A2、A3)、(B1、B2、B3)和( C1,C2,C3),现在首先我想计算每个桶的最低价格包假设它是A2,B3,C1然后我想按每个桶的相关最低价格包的持续时间字段对桶进行排序,即A2, B3 和 C1 包。

标签: elasticsearch


【解决方案1】:

由于您想按家庭包中的最小值排序,因此您可以使用 min aggregation 作为 group_by_set_url 聚合的嵌套聚合,而不是使用 top_hits 聚合。然后,您可以使用 min 聚合的值对 group_by_set_url 聚合进行排序。所以聚合将如下所示:

{
  "query": {
    // add query here
  },
  "aggs": {
    "group_by_set_url": {
      "terms": {
        "field": "set_url",
        "size": 10,
        "order": {
          "min_duration": "asc"
        }
      },
      "aggs": {
        "min_duration": {
          "min": {
            "field": "duration"
          }
        }
      }
    }
  }
}

【讨论】:

  • 嗨 Nishant,感谢您的回复,但您没有得到我的确切要求,假设术语聚合器产生 3 个存储桶 A、B、C,每个存储桶有 3 个包,(A1、A2、A3 ),(B1,B2,B3)和(C1,C2,C3),现在首先我想计算每个桶的最低价格包假设它是A2,B3,C1然后我想按持续时间对桶进行排序每个桶的相关最低价格包字段,即 A2、B3 和 C1 包。
猜你喜欢
  • 2016-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-20
  • 2022-11-21
相关资源
最近更新 更多