Elasticsearch:按日期和时间过滤为不同的字段
问题描述:
我正在尝试使用日期范围和时间范围为我的查询创建一个过滤器。就我而言,日期和时间是不同的字段。所以我想运行如下查询:向我展示本月发生的所有事件(15-10-01/15-10-30)10:00:00 am至12:00:00之间Elasticsearch:按日期和时间过滤为不同的字段
这是我的查询,但它不起作用。注意:如果我只使用“日期部分”它可以工作,但是与时间字段的组合,结果是错误的。
有什么建议吗?
{"query": {
"filtered": {
"query": {
"match": { "message" : "error" }
},
"filter": {
"bool" : {
"must" : {
"range": {
"date": {
"gte": "15-11-01",
"lte": "15-11-30"
}
}
},
"must" : {
"range": {
"time": {
"gte": "10:00:00",
"lte": "12:00:00"
}
}
}
}
}
}
}
}
更新:运行命令:
curl -XGET localhost:9200/my_index/_mapping
正如你们中的一些建议,我可以发现,ES是界定“时间”字段类型为字符串,而不是(日期)时间。 此外,正如它在第一个答案中指出的,我的查询语法是错误的。
答
有一点不正确的是,您在bool
筛选器中有两个must
子句。这不是有效的JSON,因此这可能是为什么您的查询不能正常工作,请尝试以下查询,而不是它有bool/must
过滤器内的两个range
过滤器的原因:
{
"query": {
"filtered": {
"query": {
"match": {
"message": "error"
}
},
"filter": {
"bool": {
"must": [
{
"range": {
"date": {
"gte": "15-11-01",
"lte": "15-11-30"
}
}
},
{
"range": {
"time": {
"gte": "10:00:00",
"lte": "12:00:00"
}
}
}
]
}
}
}
}
}
+0
修复此查询有没有运气? – Val
是否elasticsearch支持的时间格式,即它知道如何在一天中的时间内应用lte和gte吗? –
你对'时间'有什么映射? –
在logstash配置文件中,这些字段以这种方式映射:%{DATE:date}%{TIME:time} – xtingray