ElasticSearch - 按日期范围过滤不起作用,

时间:2014-09-09 11:10:50

标签: datetime elasticsearch

我正在尝试使用按日期范围过滤查询,但它不起作用。如果我使用 gt gte lt lte ,则会返回零结果。如果我只使用 gt lt ,则会返回一些结果,但过滤器无效。

我在uri http://mydomain.local:9200/logstash-2014.09.09/_mapping?pretty=true上检查了数据类型,字段类型是否正确:

"original" : {
    "type" : "date",
    "format" : "dateOptionalTime"
}

以下是我在ElasticSearch中编入索引的结果示例:

{
    "_index" : "logstash-2014.09.08",
    "_type" : "iis",
    "_id" : "wxtnfpyjR4u7dhwlEAWevw",
    "_score" : 1.0,
    "_source":{"@version":"1","@timestamp":"2014-09-08T20:55:46.460Z",
               "type":"iis","original":"14-09-08 17:39:58"}
}

以下是我正在尝试执行查询的方式:

{
    "query" : {
        "filtered" : {
            "filter" : {
                "range" : {
                    "original" : {
                        "gt" : "14-09-10"
                    }
                }
            }
        }
    }
}

有人知道我的查询有什么问题吗?如果我没有比今天(2014-09-09)更大的日期,为什么它会返回一些结果呢?

1 个答案:

答案 0 :(得分:1)

我创建了一个具有相同映射的索引,并尝试将记录放在

curl -XPOST localhost:9200/test-1/x/_index -d '{"original": "14-09-08 17:39:58"}'

并收到错误:

{"error":"MapperParsingException[failed to parse [original]]; nested: MapperParsingException[failed to parse date field [14-09-08 17:39:58], tried both date format [dateOptionalTime], and timestamp number with locale []]; nested: IllegalArgumentException[Invalid format: \"14-09-08 17:39:58\" is malformed at \" 17:39:58\"]; ","status":400}`

因此,我相信您所在的语言环境中##-##-##被解释为yy-mm-dd以外的其他内容。

您正在使用Logstash,因此您可以在使用original之前修复mutate字段,以使其明确无误。

mutate {
   replace => { original => "20%{original}" }
}