我需要根据elasticsearch中的数据构建热图。热图是两个特定字段具有相同值的情况的计数。对于数据
{'name': 'john', 'age': '10', 'car': 'peugeot'}
{'name': 'john', 'age': '10', 'car': 'audi'}
{'name': 'john', 'age': '12', 'car': 'fiat'}
{'name': 'mary', 'age': '3', 'car': 'mercedes'}
我想获得name
和age
值的唯一对数。那将是
john, 10, 2
john, 12, 1
mary, 3, 1
我可以获得所有事件并自己计算,但我希望会有一些神奇的聚合可以提供这个。
以嵌套形式(例如
)使用它不会有问题{
'john':
{
'10': 2,
'12': 1
},
'mary':
{
'3': 1
},
}
或其他任何实用的东西。
答案 0 :(得分:1)
您可以使用Inner aggregation
。使用像
POST count-test/_search
{
"size": 0,
"aggs": {
"group By Name": {
"terms": {
"field": "name"
},
"aggs": {
"group By age": {
"terms": {
"field": "age"
}
}
}
}
}
}
输出不会像你提到的那样,但是喜欢。
"aggregations": {
"group By Name": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "john",
"doc_count": 3,
"group By age": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "10",
"doc_count": 2
},
{
"key": "12",
"doc_count": 1
}
]
}
},
{
"key": "mary",
"doc_count": 1,
"group By age": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "3",
"doc_count": 1
}
]
}
}
]
}
}
希望这会有所帮助!!
答案 1 :(得分:0)
您可以将术语聚合与脚本一起使用:
像这样你可以“连接”你想要的东西,如:
{
"aggs" : {
"data" : {
"terms" : {
"script" : {
"source": "doc['name'].value + doc['name'].age",
"lang": "painless"
}
}
}
}
}
(不确定字符串concat语法)。