我正在尝试使用日期范围和时间范围为我的查询创建过滤器。就我而言,日期和时间是不同的领域。所以我想运行这样的查询:告诉我本月10:00:00到12:00之间发生的所有事件(15-10-01 / 15-10-30)
这是我的查询,但它不起作用。注意:如果我只使用"日期部分"它有效,但结合时间字段,结果是错误的。
有什么建议吗?
{"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正在定义"时间"字段类型为字符串而不是(日期)时间。 另外,正如第一个答案所指出的,我的查询语法错误。
答案 0 :(得分:0)
有些不正确的事情是您的must
过滤器中有两个bool
条款。这不是有效的JSON,因此可能是您的查询不起作用的原因,请尝试使用以下查询,而range
过滤器中包含两个bool/must
过滤器:
{
"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"
}
}
}
]
}
}
}
}
}