我尝试使用Elastic(5.6)并找到一种方法来检索每个类别的顶级文档。
我有一个包含以下类型文档的索引:
{
"@timestamp": "2018-03-22T00:31:00.004+01:00",
"statusInfo": {
"status": "OFFLINE",
"timestamp": 1521675034892
},
"name": "myServiceName",
"id": "xxxx",
"type": "Http",
"key": "key1",
"httpStatusCode": 200
}
}
我尝试使用这些内容,是根据@timestamp
(我的类别)检索最后一个文档(name
- ),看看它的statusInfo.status是否为{{1 }或OFFLINE
并将这些结果提取到响应的命中部分,这样我就可以把它放在Kibana计数仪表板或其他地方(我无法控制的基于REST的工具,我自己无法修改) )。
基本上,我想知道我的服务(UP
)在上次更新(name
)中有多少是OFFLINE(statusInfo.status
)用于监控目的。
我被困在"获取了多少我的服务"一部分。
到目前为止我的查询:
@timestamp
这提供了以下回复:
GET actuator/_search
{
"size": 0,
"aggs": {
"name_agg": {
"terms": {
"field": "name.raw",
"size": 1000
},
"aggs": {
"last_document": {
"top_hits": {
"_source": ["@timestamp", "name", "statusInfo.status"],
"size": 1,
"sort": [
{
"@timestamp": {
"order": "desc"
}
}
]
}
}
}
}
},
"post_filter": {
"bool": {
"must_not": {
"term": {
"statusInfo.status.raw": "UP"
}
}
}
}
}
删除大小使得结果包含所有文档,这不是我需要的,我只需要每个桶内容(每个包含一个桶)。 删除后置过滤器似乎没有太大作用。
我认为这在带有{
"all_the_meta":{...},
"hits": {
"total": 1234,
"max_score": 0,
"hits": []
},
"aggregations": {
"name_agg": {
"doc_count_error_upper_bound": 0,
"sum_other_doc_count": 0,
"buckets": [
{
"key": "myCategory1",
"doc_count": 225,
"last_document": {
"hits": {
"total": 225,
"max_score": null,
"hits": [
{
"_index": "myIndex",
"_type": "Http",
"_id": "dummy id",
"_score": null,
"_source": {
"@timestamp": "2018-04-06T00:06:00.005+02:00",
"statusInfo": {
"status": "UP"
},
"name": "myCategory1"
},
"sort": [
1522965960005
]
}
]
}
}
},
{other_buckets...}
]
}
}
}
子句的ORACLE
SQL中是可行的,后跟条件。
有人知道如何实现这一目标吗?
答案 0 :(得分:0)
如果我理解正确,您正在寻找每个组中具有OFFLINE状态的最新文档(按名称分组)?在这种情况下,您可以尝试下面的查询,并且存储桶中的项目数量应该为您提供“已关闭的数量”(对于您将更改过滤器中的术语)
注意:这是在最新版本中完成的,因此它使用关键字字段而不是原始
enum STATUS {
OK = 0,
BAD = 1,
};
STATUS func1(char *pData)
{
pData = "Hello World";
cout << pData << endl;
return OK;
}
int main()
{
STATUS ret;
char arr[] = "Example String";
char* pArray = &arr[0];
ret = func1(pArray);
cout << arr << endl;
cout << pArray << endl;
getchar();
return 0;
}