我想在elasticsearch.count(index=indices, body=query)
中为查询转换以下kibbana elasticsearch查询。
目标是获取给定时间戳(最近24小时)的计数,cluster和integer_field> 0
查询(从Kibana获得)
curl -XGET 'some-url:9200/logstash-2015.07.03,logstash-2015.07.02/_search?pretty' -d '{
"facets": {
"0": {
"date_histogram": {
"field": "@timestamp",
"interval": "10m"
},
"global": true,
"facet_filter": {
"fquery": {
"query": {
"filtered": {
"query": {
"query_string": {
"query": "*"
}
},
"filter": {
"bool": {
"must": [
{
"range": {
"@timestamp": {
"from": 1435840604940,
"to": 1435927004940
}
}
},
{
"fquery": {
"query": {
"query_string": {
"query": "integer_field:(>0)"
}
},
"_cache": true
}
},
{
"fquery": {
"query": {
"query_string": {
"query": "cluster:(\"YYY\")"
}
},
"_cache": true
}
}
]
}
}
}
}
}
}
}
},
"size": 0
}'
我已经为其他案例撰写了查询。只有这种情况,我被卡住了。帮助将非常感激。
答案 0 :(得分:1)
您正在寻找的查询比Kibana强制自动生成的查询简单。一般来说,从Kibana中提取它们时,您需要查找“已过滤”的查询部分。从那里,您可以删除通配符条件。
{
"query": {
"filtered": {
"filter": {
"bool" : {
"must" : [
{
"term" : {
"cluster" : "YYYY"
}
},
{
"range" : {
"integer_field" : {
"gt" : 0
}
}
},
{
"range" : {
"@timestamp" : {
"gt" : "now - 24h"
}
}
}
]
}
}
}
}
}
“群集”term
过滤器是唯一可能无法“使用”的过滤器。 term
过滤器与索引值的精确匹配,因此如果它不是字面上的“YYYY”(例如,“yyyy”),则它将不匹配。您可能希望{ "term": { ... } }
为:
{
"fquery" : {
"query" : {
"match" : {
"cluster" : "YYYY"
}
}
}
}