Elasticsearch运行汇总查询-由仅购买该产品的客户购买的产品

时间:2019-02-21 15:52:13

标签: sql elasticsearch nosql kibana

我的文档以给定格式表示订单:

{
   "name", // the client
   "sku"   // the product
}

因此,假设存在以下数据:

{   "name": "rudolph",  "sku": "apple" }
{   "name": "rudolph",  "sku": "apple" }
{   "name": "rudolph",  "sku": "apple" }
{   "name": "john",     "sku": "banana" }
{   "name": "john",     "sku": "banana" }
{   "name": "paul",     "sku": "banana" }
{   "name": "paul",     "sku": "apple" }
{   "name": "peter",    "sku": "banana" }

通过查询,我可以得到只购买了1种商品的客户:

{
"aggs": {
    "clients": {
        "terms": {
            "field": "name"
        },
        "aggs": {
            "distinct_sku": {
                "cardinality": {
                    "field": "sku"
                }
            },
            "unique_sku": {
                "bucket_selector": {
                    "buckets_path": {
                        "qty": "distinct_sku"
                    },
                    "script": "params.qty == 1"
                }
            },
            "aggs": {
              "terms": {
                "field": "sku"
              }
            }
        }
    }
},
"size": 0
}

结果

{   
...
"aggregations": {
    "clients": {
      ...
      "buckets": [
        {
          "key": "rudolph",
          "doc_count": 3,
          ...
          "aggs": {
            ...
            "buckets": [
              {
                "key": "apple",
                "doc_count": 3
              }
            ]
          }
        },
        {
          "key": "john",
          "doc_count": 2,
          ...
          "aggs": {
            ...
            "buckets": [
              {
                "key": "banana",
                "doc_count": 2
              }
            ]
          }
        },
        {
          "key": "peter",
          "doc_count": 1,
          ...
          "aggs": {
            ...
            "buckets": [
              {
                "key": "banana",
                "doc_count": 1
              }
            ]
          }
        }
      ]
    }
}
}

可以管理查询以返回结果中每个项目出现了多少?

类似这样的事情: {     “苹果”:1     “香蕉”:2 }

谢谢。

编辑
我的基地有大量的客户和少量的产品,所以:

  1. 遍历以上聚合结果以构建所需结果不是一种选择。
  2. 如果我必须为每个产品发送查询,就可以了。

0 个答案:

没有答案