我有很多看起来像这样的数据:
{
"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论坛等但我无法破解它。
你能帮忙吗?
谢谢, 安迪
答案 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
}
}
希望它有所帮助。