从 Kibana 获取 elasticsearch 查询

Obtaining an elasticsearch query from Kibana

我想将以下 kibbana elasticsearch 查询转换为 elasticsearch.count(index=indices, body=query) 中的查询。

目标是获取给定时间戳(过去 24 小时)、集群和 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
}'

我已经写了其他案例的查询。只有这种情况,我被困住了。帮助将不胜感激。

您正在寻找的查询比 Kibana 强制自动生成的查询更简单。一般来说,从 Kibana 中拉取它们时,您要查找 "filtered" 查询部分。从那里,您可以删除通配符条件。

{
  "query": {
    "filtered": {
      "filter": {
        "bool" : {
          "must" : [
            {
              "term" : {
                "cluster" : "YYYY"
              }
            },
            {
              "range" : {
                "integer_field" : {
                  "gt" : 0
                }
              }
            },
            {
              "range" : {
                "@timestamp" : {
                  "gt" : "now - 24h"
                }
              }
            }
          ]
        }
      }
    }
  }
}

"cluster" term 过滤器是唯一一个可能 "valid" 不供您使用的过滤器。 term 过滤器与索引值 完全 匹配,因此如果它不是字面上的 "YYYY"(例如,"yyyy"),那么它将不匹配.您可能希望 { "term": { ... } } 为:

{
  "fquery" : {
    "query" : {
      "match" : {
        "cluster" : "YYYY"
      }
    }
  }
}