使用Elasticsearch中的范围和术语进行计数

时间:2013-09-28 02:17:01

标签: elasticsearch

我正在尝试进行count查询,以便返回在过去10分钟内登录系统失败的次数。我创建了这个查询:

{
  "term": {
    "success":false
  },
  "range": {
    "_timestamp": {
      "gt": "now-10m"
    }
  }
}

但是,这会在任何时候返回所有不成功的尝试,而忽略我的查询中的range过滤器。我正确构建此查询吗?当我使用术语和范围search时,查询有效。

换句话说,上述查询和curl -XGET localhost:9200/application/_count的输出是相同的(我只测试过不成功的尝试)。

2 个答案:

答案 0 :(得分:1)

尝试使用search_type参数而不是使用countAPI。这实际上是首选:

curl -XGET localhost:9200/application/_search&search_type=count -d'{
    query:....
}'

文档: http://www.elasticsearch.org/guide/reference/api/search/search-type/

答案 1 :(得分:0)

range是一个过滤器,因此我认为您必须创建一个filtered查询才能正确考虑它:

{
  "filtered": {
    "query": {
      "term": {
        "success":false
      },
    },
    "filter: {
      "range": {
        "_timestamp": {
          "gt": "now-10m"
        }
      }
    }
  }
}