Elasticsearch:如何通过属性中的项目数来计算文档数?

时间:2018-11-20 13:47:37

标签: elasticsearch

假设我有一个看起来像这样的Elasticsearch文档

{
    "_index": "sample.index",
    "_type": "inventory",
    "_id": "ebcc7f5c-1697-438f-911f-b8e9ff5554e9",
    "_score": 1,
    "_source": {
        "name": "salt",
        "properties": {
            "vendors": ["vendor 1", "vendor 2"]
        }
    }
},
{
    "_index": "sample.index",
    "_type": "inventory",
    "_id": "f5875c5c-9bf1-448b-99d9-47d873d4f016",
    "_score": 1,
    "_source": {
        "name": "pepper",
        "properties": {
            "vendors": ["vendor 1"]
        }
    }
}

我想做的是获取来自一个供应商,两个供应商等的项目计数。基本上,这是一个基于供应商数组长度的查询。

这是我要获取的输出类型,或类似的内容。

{
    "aggregations": {
        "vendor_counts": {
            "buckets": [
                {
                    "vendor_array_length": "1",
                    "doc_count": 1
                },
                {
                    "vendor_array_length": "2",
                    "doc_count": 1
                }
            ]
        }
    }
}

在此先感谢您的帮助:)

编辑:以下接受的答案似乎适用于ES的较新版本,但是我必须使用较旧的版本(最初发布此问题后,我发现了这一点)。以下查询在ES 2.4上对我有效。

{
  "size": 0,
  "aggs": {
    "length": {
      "terms": {
        "script": "_source.vendors.size()"
      }
    }
  }
}

1 个答案:

答案 0 :(得分:1)

您可以这样做:

User variables