ElasticSearch数据的分组、计算和排序
Group, calculation and order of ElasticSearch data
我有很多数据存储在下面的格式(我简化了数据来说明问题)。
我需要的是:
- 按"Action Id"字段对所有数据进行分组
- 计算每组 "Created Time" 的最大值和最小值之间的差异(来自上一个操作)
- 按计算字段对结果排序("Action duration" - 最大值和最小值之差)
我使用 NEST (C#) 来查询 ElasticSearch。我认为如果你能帮助我进行原生 Elastic 查询,它也会非常有帮助,我会把它翻译成 C#。
谢谢。
假设您的映射是这样的:
PUT /index
{
"mappings": {
"doc": {
"properties": {
"ActionId": {
"type": "text",
"fielddata": true
},
"CreatedDate":{
"type": "date"
},
"SubActionName":{
"type": "text",
"fielddata": true
}
}
}
}
}
您的 elasticsearch 查询应如下所示:
GET index/_search
{
"size": 0,
"aggs": {
"actions": {
"terms": {
"field": "ActionId"
},
"aggs": {
"date_created": {
"date_histogram": {
"field": "CreatedDate",
"interval": "hour"
},
"aggs": {
"the_max": {
"max": {
"field": "CreatedDate"
}
},
"the_min": {
"min": {
"field": "CreatedDate"
}
},
"diff_max_min": {
"bucket_script": {
"buckets_path": {
"max": "the_max",
"min": "the_min"
},
"script": "params.max - params.min"
}
}
}
}
}
}
}
}
您可以阅读有关管道聚合的更多信息here
希望对您有所帮助
我有很多数据存储在下面的格式(我简化了数据来说明问题)。
我需要的是:
- 按"Action Id"字段对所有数据进行分组
- 计算每组 "Created Time" 的最大值和最小值之间的差异(来自上一个操作)
- 按计算字段对结果排序("Action duration" - 最大值和最小值之差)
我使用 NEST (C#) 来查询 ElasticSearch。我认为如果你能帮助我进行原生 Elastic 查询,它也会非常有帮助,我会把它翻译成 C#。
谢谢。
假设您的映射是这样的:
PUT /index
{
"mappings": {
"doc": {
"properties": {
"ActionId": {
"type": "text",
"fielddata": true
},
"CreatedDate":{
"type": "date"
},
"SubActionName":{
"type": "text",
"fielddata": true
}
}
}
}
}
您的 elasticsearch 查询应如下所示:
GET index/_search
{
"size": 0,
"aggs": {
"actions": {
"terms": {
"field": "ActionId"
},
"aggs": {
"date_created": {
"date_histogram": {
"field": "CreatedDate",
"interval": "hour"
},
"aggs": {
"the_max": {
"max": {
"field": "CreatedDate"
}
},
"the_min": {
"min": {
"field": "CreatedDate"
}
},
"diff_max_min": {
"bucket_script": {
"buckets_path": {
"max": "the_max",
"min": "the_min"
},
"script": "params.max - params.min"
}
}
}
}
}
}
}
}
您可以阅读有关管道聚合的更多信息here
希望对您有所帮助