ES实现nested类型聚合以及子聚合排序

ES实现nested类型聚合以及子聚合排序

需求业务说明

针对日销量索引,需要分析品牌、品类等日销量趋势,以及近7天,近30天等销量靠前的品牌、品类等。
涉及到 nested 聚合,以及聚合排序。
指定日期范围价格趋势,销量趋势查询排序

品牌近7天销量

//品类近7天销量
POST /goods_sku_sales2_v20200109/_search
{
  "size": 0,
  "query": {
    "match_all": {
      
    }
  },
  "aggs": {
    "group_by_brand": {
      "terms": {
        "field": "standardCategoryParentName",
        "size": 10,
        "order" : { "7days>filter_type>sum_sale" : "desc" }
      },
      "aggs": {
        "7days": {
          "nested": {
            "path": "salesInfo"
          },
          "aggs": {
            "filter_type": {
              "filter": {
                "range": {
                  "salesInfo.saleDt": {
                    "gte": "2020-01-12",
                    "lte": "2020-01-18",
                    "format": "yyyy-MM-dd"
                  }
                }
              },
              "aggs": {
                "sum_sale": {
                  "sum": {
                    "field": "salesInfo.salesVolume"
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

品牌近7日销量趋势

//品牌日销量趋势
POST /goods_sku_sales2_v20200615/_search
{
  "size": 0,
  "query": {
    "match": {
      "standardBrandName": "完美日记"
    }
  },
  "aggs": {
    "by_day": {
      "nested": {
        "path": "salesInfo"
      },
      "aggs": {
        "filter_type": {
          "filter": {
            "range": {
              "salesInfo.saleDt": {
                "gte": "2020-06-10",
                "lte": "2020-06-18",
                "format": "yyyy-MM-dd"
              }
            }
          },
          "aggs": {
            "salesInfo_dt": {
              "terms": {
                "field": "salesInfo.saleDt",
                "size": 90
              },
              "aggs": {
                "sum_sale": {
                  "sum": {
                    "field": "salesInfo.salesVolume"
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

指定某个sku日期范围销量趋势和价格趋势

GET /goods_sku_sales2_v20200305/_search?pretty
{
  "_source": "",
  "query": {
    "bool": {
      "must": [
        {
          "nested": {
            "path": "salesInfo",
            "query": {
              "bool": {
                "must": [
                  {
                    "range": {
                      "salesInfo.saleDt": {
                        "gte": "2020-01-12",
                        "lte": "2020-01-18",
                        "format": "yyyy-MM-dd"
                      }
                    }
                  }
                ]
              }
            },
            "inner_hits": {
              "sort": {
                "salesInfo.saleDt": {
                  "order": "asc"
                }
              },
              "size": 10
            }
          }
        },
        {
          "match_phrase": {
            "skuPk": "00_592671059999_0"
          }
        }
      ]
    }
  }
}

电商商品日销量索引mapping

{
  "mapping": {
    "_doc": {
      "dynamic": "true",
      "dynamic_templates": [
        {
          "integers": {
            "match": "salesVolume*",
            "mapping": {
              "type": "long"
            }
          }
        },
        {
          "doubles": {
            "match": "sales*",
            "mapping": {
              "type": "double"
            }
          }
        },
        {
          "keywords": {
            "match": "saleDt",
            "mapping": {
              "type": "keyword"
            }
          }
        }
      ],
      "properties": {
        "channel": {
          "type": "keyword"
        },
        "declareIngredientNames": {
          "type": "text",
          "analyzer": "simple_comma_analyzer",
          "fielddata": true
        },
        "goodsName": {
          "type": "text",
          "term_vector": "with_positions_offsets",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          },
          "analyzer": "ik_max_word",
          "search_analyzer": "ik_smart_synonym",
          "fielddata": true
        },
        "goodsPk": {
          "type": "keyword"
        },
        "salesInfo": {
          "type": "nested",
          "properties": {
            "saleDt": {
              "type": "keyword"
            },
            "sales": {
              "type": "double"
            },
            "salesVolume": {
              "type": "long"
            }
          }
        },
        "shopPk": {
          "type": "keyword"
        },
        "skuPk": {
          "type": "keyword"
        },
        "standardBrandName": {
          "type": "keyword",
          "normalizer": "lc_normalizer"
        },
        "standardCategoryNames": {
          "type": "keyword"
        },
        "standardCategoryParentName": {
          "type": "keyword"
        },
        "standardConceptNames": {
          "type": "text",
          "analyzer": "simple_comma_analyzer",
          "fielddata": true
        },
        "standardEfficacyNames": {
          "type": "text",
          "analyzer": "simple_comma_analyzer",
          "fielddata": true
        },
        "standardEfficacyParentNames": {
          "type": "text",
          "analyzer": "simple_comma_analyzer",
          "fielddata": true
        },
        "standardGoodsName": {
          "type": "text",
          "term_vector": "with_positions_offsets",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          },
          "analyzer": "ik_max_word",
          "search_analyzer": "ik_smart_synonym",
          "fielddata": true
        },
        "standardIngredientNames": {
          "type": "text",
          "analyzer": "simple_comma_analyzer",
          "fielddata": true
        },
        "tagNames": {
          "type": "text",
          "analyzer": "simple_comma_analyzer",
          "fielddata": true
        }
      }
    }
  }
}

电商商品sku销量索引数据

{
  "took": 50,
  "timed_out": false,
  "_shards": {
    "total": 3,
    "successful": 3,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": 1,
    "max_score": 12.854391,
    "hits": [
      {
        "_index": "goods_sku_sales2_v20200109",
        "_type": "_doc",
        "_id": "01_534144856955_3917259493034",
        "_score": 12.854391,
        "_source": {
          "goodsPk": "01_534144856955",
          "channel": "01",
          "standardBrandName": "1",
          "standardEfficacyNames": "3",
          "tagNames": "2",
          "standardEfficacyParentNames": "1",
          "standardCategoryNames": "1",
          "standardCategoryParentName": "1",
          "shopPk": "01_151815633",
          "salesInfo": [
            {
              "saleDt": "2019-10-23",
              "salesVolume": "12",
              "sales": "4440.0"
            },
            {
              "saleDt": "2019-12-30",
              "salesVolume": "13",
              "sales": "5460.0"
            },
            {
              "saleDt": "2020-01-03",
              "salesVolume": "3",
              "sales": "1260.0"
            },
            {
              "saleDt": "2019-10-21",
              "salesVolume": "231",
              "sales": "85470.0"
            },
            {
              "saleDt": "2019-11-06",
              "salesVolume": "15",
              "sales": "5550.0"
            },
            {
              "saleDt": "2019-11-30",
              "salesVolume": "0",
              "sales": "0"
            },
            {
              "saleDt": "2020-01-13",
              "salesVolume": "3",
              "sales": "1260"
            },
            {
              "saleDt": "2019-11-20",
              "salesVolume": "0",
              "sales": "0"
            },
            {
              "saleDt": "2020-01-19",
              "salesVolume": "1",
              "sales": "420.0"
            },
            {
              "saleDt": "2019-12-09",
              "salesVolume": "3",
              "sales": "910.0"
            },
            {
              "saleDt": "2019-11-09",
              "salesVolume": "43",
              "sales": "15910.0"
            },
            {
              "saleDt": "2020-01-18",
              "salesVolume": "0",
              "sales": "0"
            },
            {
              "saleDt": "2020-01-14",
              "salesVolume": "5",
              "sales": "2100"
            },
            {
              "saleDt": "2020-01-05",
              "salesVolume": "9",
              "sales": "3780.0"
            },
            {
              "saleDt": "2019-10-18",
              "salesVolume": "0",
              "sales": "0"
            },
            {
              "saleDt": "2019-12-16",
              "salesVolume": "1",
              "sales": "420"
            },
            {
              "saleDt": "2019-10-08",
              "salesVolume": "4",
              "sales": "1760.0"
            },
            {
              "saleDt": "2020-01-02",
              "salesVolume": "7",
              "sales": "2940.0"
            },
            {
              "saleDt": "2020-01-11",
              "salesVolume": "7",
              "sales": "2940.0"
            },
            {
              "saleDt": "2019-10-15",
              "salesVolume": "1",
              "sales": "440.0"
            },
            {
              "saleDt": "2019-11-22",
              "salesVolume": "0",
              "sales": "0"
            },
            {
              "saleDt": "2019-10-28",
              "salesVolume": "13",
              "sales": "4810.0"
            },
            {
              "saleDt": "2020-01-10",
              "salesVolume": "7",
              "sales": "3048.39"
            },
            {
              "saleDt": "2019-12-21",
              "salesVolume": "8",
              "sales": "3360"
            },
            {
              "saleDt": "2019-11-11",
              "salesVolume": "49",
              "sales": "18515"
            },
            {
              "saleDt": "2020-01-12",
              "salesVolume": "6",
              "sales": "2520"
            },
            {
              "saleDt": "2019-12-19",
              "salesVolume": "17",
              "sales": "7140"
            },
            {
              "saleDt": "2019-12-29",
              "salesVolume": "3",
              "sales": "1260.0"
            },
            {
              "saleDt": "2019-11-24",
              "salesVolume": "0",
              "sales": "0"
            },
            {
              "saleDt": "2020-01-06",
              "salesVolume": "11",
              "sales": "4620"
            },
            {
              "saleDt": "2019-12-27",
              "salesVolume": "9",
              "sales": "3780.0"
            },
            {
              "saleDt": "2019-11-27",
              "salesVolume": "0",
              "sales": "0"
            },
            {
              "saleDt": "2019-11-12",
              "salesVolume": "6",
              "sales": "2640"
            },
            {
              "saleDt": "2019-12-18",
              "salesVolume": "21",
              "sales": "8568.0"
            },
            {
              "saleDt": "2019-11-16",
              "salesVolume": "1",
              "sales": "440"
            },
            {
              "saleDt": "2019-12-01",
              "salesVolume": "1",
              "sales": "420.0"
            },
            {
              "saleDt": "2019-12-23",
              "salesVolume": "8",
              "sales": "3360"
            },
            {
              "saleDt": "2019-12-24",
              "salesVolume": "0",
              "sales": "0"
            },
            {
              "saleDt": "2019-10-12",
              "salesVolume": "1",
              "sales": "440.0"
            },
            {
              "saleDt": "2019-12-12",
              "salesVolume": "145",
              "sales": "61090.91"
            },
            {
              "saleDt": "2019-11-28",
              "salesVolume": "0",
              "sales": "0"
            },
            {
              "saleDt": "2019-12-08",
              "salesVolume": "1",
              "sales": "420"
            },
            {
              "saleDt": "2019-11-10",
              "salesVolume": "29",
              "sales": "10730.0"
            },
            {
              "saleDt": "2019-10-27",
              "salesVolume": "9",
              "sales": "3330.0"
            },
            {
              "saleDt": "2019-10-25",
              "salesVolume": "14",
              "sales": "5180.0"
            },
            {
              "saleDt": "2019-12-28",
              "salesVolume": "5",
              "sales": "2100.0"
            },
            {
              "saleDt": "2020-01-08",
              "salesVolume": "11",
              "sales": "4620"
            },
            {
              "saleDt": "2019-12-26",
              "salesVolume": "1",
              "sales": "420.0"
            },
            {
              "saleDt": "2019-10-24",
              "salesVolume": "7",
              "sales": "2590.0"
            },
            {
              "saleDt": "2020-01-04",
              "salesVolume": "5",
              "sales": "2100.0"
            },
            {
              "saleDt": "2019-12-06",
              "salesVolume": "0",
              "sales": "0"
            },
            {
              "saleDt": "2019-10-30",
              "salesVolume": "11",
              "sales": "3885.0"
            },
            {
              "saleDt": "2019-12-02",
              "salesVolume": "3",
              "sales": "1260.0"
            },
            {
              "saleDt": "2019-11-29",
              "salesVolume": "0",
              "sales": "0"
            },
            {
              "saleDt": "2019-12-04",
              "salesVolume": "2",
              "sales": "840.0"
            },
            {
              "saleDt": "2019-10-22",
              "salesVolume": "25",
              "sales": "9250.0"
            },
            {
              "saleDt": "2020-01-17",
              "salesVolume": "4",
              "sales": "1680.0"
            },
            {
              "saleDt": "2019-10-10",
              "salesVolume": "0",
              "sales": "0"
            },
            {
              "saleDt": "2019-12-20",
              "salesVolume": "9",
              "sales": "3780"
            },
            {
              "saleDt": "2019-10-17",
              "salesVolume": "0",
              "sales": "0"
            },
            {
              "saleDt": "2019-10-19",
              "salesVolume": "0",
              "sales": "0"
            },
            {
              "saleDt": "2019-11-02",
              "salesVolume": "9",
              "sales": "3330.0"
            },
            {
              "saleDt": "2019-10-20",
              "salesVolume": "1",
              "sales": "405"
            },
            {
              "saleDt": "2019-12-15",
              "salesVolume": "1",
              "sales": "420"
            },
            {
              "saleDt": "2019-10-26",
              "salesVolume": "13",
              "sales": "4810.0"
            },
            {
              "saleDt": "2019-11-17",
              "salesVolume": "0",
              "sales": "0"
            },
            {
              "saleDt": "2019-11-01",
              "salesVolume": "14",
              "sales": "5180.0"
            },
            {
              "saleDt": "2020-01-15",
              "salesVolume": "13",
              "sales": "5460"
            },
            {
              "saleDt": "2019-11-26",
              "salesVolume": "1",
              "sales": "440.0"
            },
            {
              "saleDt": "2019-11-08",
              "salesVolume": "109",
              "sales": "40330.0"
            },
            {
              "saleDt": "2019-12-07",
              "salesVolume": "1",
              "sales": "420.0"
            },
            {
              "saleDt": "2019-10-16",
              "salesVolume": "0",
              "sales": "0"
            },
            {
              "saleDt": "2019-12-11",
              "salesVolume": "4",
              "sales": "1400.0"
            },
            {
              "saleDt": "2019-12-17",
              "salesVolume": "3",
              "sales": "980.0"
            },
            {
              "saleDt": "2019-11-13",
              "salesVolume": "0",
              "sales": "0"
            },
            {
              "saleDt": "2019-12-25",
              "salesVolume": "0",
              "sales": "0"
            },
            {
              "saleDt": "2019-12-03",
              "salesVolume": "1",
              "sales": "420.0"
            },
            {
              "saleDt": "2019-11-21",
              "salesVolume": "1",
              "sales": "440.0"
            },
            {
              "saleDt": "2019-10-31",
              "salesVolume": "12",
              "sales": "4440.0"
            },
            {
              "saleDt": "2019-10-29",
              "salesVolume": "10",
              "sales": "3515.0"
            },
            {
              "saleDt": "2019-10-11",
              "salesVolume": "2",
              "sales": "880.0"
            },
            {
              "saleDt": "2019-12-22",
              "salesVolume": "3",
              "sales": "1260"
            },
            {
              "saleDt": "2019-10-13",
              "salesVolume": "0",
              "sales": "0"
            },
            {
              "saleDt": "2019-12-14",
              "salesVolume": "0",
              "sales": "0"
            },
            {
              "saleDt": "2019-11-25",
              "salesVolume": "2",
              "sales": "880.0"
            },
            {
              "saleDt": "2019-11-15",
              "salesVolume": "0",
              "sales": "0"
            },
            {
              "saleDt": "2019-12-10",
              "salesVolume": "0",
              "sales": "0"
            },
            {
              "saleDt": "2019-10-14",
              "salesVolume": "1",
              "sales": "440.0"
            },
            {
              "saleDt": "2019-12-05",
              "salesVolume": "0",
              "sales": "0"
            },
            {
              "saleDt": "2020-01-16",
              "salesVolume": "0",
              "sales": "0"
            },
            {
              "saleDt": "2019-11-03",
              "salesVolume": "9",
              "sales": "3330.0"
            },
            {
              "saleDt": "2019-11-05",
              "salesVolume": "15",
              "sales": "5550"
            },
            {
              "saleDt": "2019-11-19",
              "salesVolume": "1",
              "sales": "440.0"
            },
            {
              "saleDt": "2019-11-18",
              "salesVolume": "0",
              "sales": "0"
            },
            {
              "saleDt": "2020-01-09",
              "salesVolume": "6",
              "sales": "2520"
            },
            {
              "saleDt": "2019-11-23",
              "salesVolume": "0",
              "sales": "0"
            },
            {
              "saleDt": "2019-12-13",
              "salesVolume": "7",
              "sales": "2940"
            },
            {
              "saleDt": "2020-01-01",
              "salesVolume": "8",
              "sales": "3360.0"
            },
            {
              "saleDt": "2019-12-31",
              "salesVolume": "10",
              "sales": "4200.0"
            },
            {
              "saleDt": "2020-01-07",
              "salesVolume": "18",
              "sales": "7560"
            },
            {
              "saleDt": "2019-10-09",
              "salesVolume": "4",
              "sales": "1540"
            },
            {
              "saleDt": "2019-11-07",
              "salesVolume": "11",
              "sales": "4070.0"
            },
            {
              "saleDt": "2019-11-14",
              "salesVolume": "2",
              "sales": "880"
            },
            {
              "saleDt": "2019-11-04",
              "salesVolume": "13",
              "sales": "4810"
            }
          ],
          "goodsName": "iope天才水青春焕妍精华液补水保湿滋润神仙水官方正品 非亦博",
          "skuPk": "01_534144856955_3917259493034"
        }
      }
    ]
  }
}

参考文献

elasticsearch 【聚合排序参考】
elasticsearch 【nested聚合参考】

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现 Elasticsearch 的嵌套聚合查询,你可以使用 Elasticsearch 的 AggregationBuilders 类来创建嵌套聚合查询。具体实现步骤如下: 1. 创建一个嵌套聚合查询,用于组合多个聚合查询。 2. 在嵌套聚合查询中添加多个聚合查询,分别对应不同的聚合方式。 3. 如果你需要对聚合查询进行分组,可以在聚合查询中添加 terms 聚合查询。 4. 如果你需要对聚合查询进行计数,可以在聚合查询中添加 count 聚合查询。 5. 执行查询并处理结果。 以下是一个示例 Java 代码,用于实现 Elasticsearch 的嵌套聚合查询: ``` SearchResponse response = client.prepareSearch("index_name") .addAggregation( AggregationBuilders.nested("nested_agg", "nested_field") .subAggregation(AggregationBuilders.terms("term_agg") .field("term_field")) .subAggregation(AggregationBuilders.count("count_agg") .field("count_field"))) .execute() .actionGet(); Nested nestedAgg = response.getAggregations().get("nested_agg"); Terms termAgg = nestedAgg.getAggregations().get("term_agg"); long totalCount = nestedAgg.getAggregations().get("count_agg").getDocCount(); ``` 其中,"index_name" 是你要查询的索引名称,"nested_field" 是你要进行嵌套聚合查询的字段名称,"term_field" 和 "count_field" 分别是你要进行分组和计数的字段名称。你可以根据实际情况进行修改。执行完查询后,你可以从查询结果中获取嵌套聚合对象,并进一步获取聚合对象的结果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值