1

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

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

但是,这会随时返回所有不成功的尝试,而忽略range我的查询中的过滤器。我是否正确地构建了这个查询?当我search使用术语和范围进行查询时,该查询有效。

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

4

2 回答 2

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/

于 2013-09-30T14:26:26.020 回答
0

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

{
  "filtered": {
    "query": {
      "term": {
        "success":false
      },
    },
    "filter: {
      "range": {
        "_timestamp": {
          "gt": "now-10m"
        }
      }
    }
  }
}
于 2013-09-28T11:51:00.840 回答