获得多个字段的基数?

时间:2016-02-11 16:49:24

标签: elasticsearch

如何计算数据库文档中存在的2个字段的所有唯一值组合,即实现与“基数”聚合提供的功能相同的功能,但是对于超过1个字段?

2 个答案:

答案 0 :(得分:2)

您可以使用脚本来实现此目的。假设字段“#”不存在于两个字段的任何值中(您可以使用其他任何东西作为分隔符),那么您要查找的查询就是如下。请注意,脚本编写会带来性能损失。

{
    "aggs" : {
        "multi_field_cardinality" : {
            "cardinality" : {
                "script": "doc['<field1>'].value + '#' + doc['<field2'].value"
            }
        }
    }
}

详细了解here

答案 1 :(得分:2)

更好的解决方案是使用嵌套聚合,然后计算生成的桶。

"aggs": {
    "Group1": {
        "terms": {
            "field": "Field1",
            "size": 0
        },
        "aggs": {
            "Group2": {
                "terms": {
                    "field": "Field2",
                    "size": 0
                }
            }
        }
    }
}