Elasticsearch 使用terms对long类型日期统计按月销售

索引mapping:

json 复制代码
{
      "properties" : {
        "_class" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "createDate" : {
          "type" : "long"
        },
        "goodsCode" : {
          "type" : "keyword"
        },
        "id" : {
          "type" : "text",
          "fields" : {
            "keyword" : {
              "type" : "keyword",
              "ignore_above" : 256
            }
          }
        },
        "orderNumber" : {
          "type" : "keyword"
        },
        "payDate" : {
          "type" : "long"
        },
        "saleQty" : {
          "type" : "double"
        }
      }
    }

payDate字段映射为long类型,在使用date_histogram统计时,统计不出想要的效果。

json 复制代码
{
    ...
    "aggs": {
       "agg_name": {
            "date_histogram": {
                "field": "payDate",
                "interval": "1m",
                "format": "yyyy-MM",
                "min_doc_count": 0
            }
        }
    }
}

结果输出的是"yyyy-MM1577836800000",并不是期待的2023-06.

json 复制代码
{
    "key_as_string": "yyyy-MM1577836800000",
    "key": 1577836800000,
    "doc_count": 3
}

改用terms+script+子聚合方式统计:

json 复制代码
{
  "query": {
    "range": {
      "payDate": {
        "gte": 1685548800000
      }
    }
  },
  "size":0, 
  "aggs": {
    "month_sales":{
      "terms": {
        "script": {
          "source": """
        DateTimeFormatter df = DateTimeFormatter.ofPattern("yyyy-MM").withZone(ZoneId.systemDefault());
           return df.format(Instant.ofEpochMilli(doc['payDate'].value));
        """,
        "lang":"painless"
        },
        "order": {
          "_key": "asc"
        }
      },
      "aggs": {
        "sale_sum": {
          "sum": {
            "field": "saleQty"
          }
        }
      }
    }
  }
}

script:使用脚本把pay格式化成yyyy-MM的字符串。

order:根据日期排序

sale_sum:统计每个桶里面商品销售数量

输出结果:

json 复制代码
{
    "month_sales": {
        "doc_count_error_upper_bound": 0,
        "sum_other_doc_count": 9723368,
        "buckets": [
            {
                "key": "2023-06",
                "doc_count": 49,
                "sale_sum": {
                    "value": 77.0
                }
            },
            {
                "key": "2023-07",
                "doc_count": 217,
                "sale_sum": {
                    "value": 40012.0
                }
            },
            {
                "key": "2023-08",
                "doc_count": 2187911,
                "sale_sum": {
                    "value": 3486633.0
                }
            },
            {
                "key": "2023-09",
                "doc_count": 2746235,
                "sale_sum": {
                    "value": 4556942.0
                }
            },
            {
                "key": "2023-10",
                "doc_count": 2346896,
                "sale_sum": {
                    "value": 4097690.0
                }
            },
            {
                "key": "2023-11",
                "doc_count": 2442224,
                "sale_sum": {
                    "value": 4120708.0
                }
            },
            {
                "key": "2023-12",
                "doc_count": 2359840,
                "sale_sum": {
                    "value": 4167825.0
                }
            },
            {
                "key": "2024-01",
                "doc_count": 3619202,
                "sale_sum": {
                    "value": 6506941.0
                }
            },
            {
                "key": "2024-02",
                "doc_count": 2673919,
                "sale_sum": {
                    "value": 5066871.0
                }
            },
            {
                "key": "2024-03",
                "doc_count": 3078439,
                "sale_sum": {
                    "value": 4810836.0
                }
            }
        ]
    }
}

key:每个月份

doc_count:每个月的订单数量

sale_sum:每个月商品销售数量

相关推荐
大圣编蚕7 小时前
OpenGL ES 教程:从零开始掌握 3D 渲染
大数据·elasticsearch·3d
回眸不遇8 小时前
Elasticsearch嵌套类型nested使用指南<第七十二篇>
大数据·elasticsearch·jenkins
Elasticsearch13 小时前
使用 Elastic Stack 丰富邮政地址信息 —— 第三部分
elasticsearch
Elasticsearch14 小时前
使用 Elastic Stack 丰富邮政地址信息 —— 第二部分
elasticsearch
可乐ea14 小时前
Git 基础设施重建:智能体规模开发下的读写解耦
大数据·git·elasticsearch·分布式存储·git基础设施·智能体规模开发·读写解耦
Elasticsearch16 小时前
使用 Elastic Stack 丰富邮政地址信息 —— 第一部分
elasticsearch
ofoxcoding2 天前
借助 CLAUDE.md 约束 Sonnet 5.5 多文件重构行为的提示词实践
大数据·elasticsearch·ai·重构
Elasticsearch2 天前
隆重推出 AlertZero:让你的告警队列实现 “收件箱清零” 式管理
elasticsearch
ly76892 天前
从 TF-IDF 到 BM25:Elasticsearch 相关性评分的字段长度归一化与 boost 调参边界
java·elasticsearch·query dsl·bm25·相关性评分
SL-staff2 天前
技术实践:将Excel自动升级为可搜索的知识节点(JVS平台实现)
mongodb·elasticsearch·知识图谱·jvs平台·语义解析·企业文档管理·excel结构化