如何在Elasticsearch中搜索时间范围?

时间:2016-02-06 13:23:11

标签: elasticsearch

我有很多看起来像这样的数据:

{
"timestamp": "2015-04-23T14:35:43.511Z",
"component1Health": "false",
"area": "squad1"
}

{
"timestamp": "2015-04-23T18:03:22.911Z",
"component1Health": "true",
"area": "squad7"
}

我想搜索一下

的所有实例
"component1Health": "false"

发生在上午8点到晚上8点之间的任何工作日。

https://www.elastic.co/guide/en/elasticsearch/guide/current/_ranges.html处的文档 表明在日期范围内搜索很容易,例如

"range" : {
"timestamp" : {
    "gt" : "2014-01-01 00:00:00",
    "lt" : "2014-01-07 00:00:00"
    }
}

但我无法弄清楚我做错了什么来抽出时间。我已经通过stackoverflow和es论坛等但我无法破解它。

你能帮忙吗?

谢谢, 安迪

1 个答案:

答案 0 :(得分:2)

我认为你不能用日期范围达到目的。一个简单的解决方案是索引一个包含一小时的新整数字段。这样你的两个文件就像:

{
  "timestamp": "2015-04-23T14:35:43.511Z",
  "hourOfTheDay": 14,
  "component1Health": "false",
  "area": "squad1"
}

{
  "timestamp": "2015-04-23T18:03:22.911Z",
  "hourOfTheDay": 18,
  "component1Health": "true",
  "area": "squad7"
}

现在,您可以在该新字段上执行类似的范围过滤,如下所示:

"range" : {
  "hourOfTheDay" : {
     "gt" : 7,
     "lt" : 21
   }
}

希望它有所帮助。