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

标签 datetime elasticsearch

我正在尝试使用日期范围过滤查询,但是它不起作用。如果我使用 gt gote 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),为什么它返回一些结果?

最佳答案

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

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}" }
}

关于datetime - ElasticSearch-按日期进行范围过滤不起作用,,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25743157/

相关文章:

search - ElasticSearch自动完成

json - 如何使用 set_fact 打印数组变量以在 ansible add_host 模块中使用

ruby-on-rails - Rails 时间比较

sql-server - 如何在 SQL 中将文本列转换为日期时间

datetime - Rust chrono 给出 ParseError(NotEnough)

python - 使用 "django-elasticsearch-dsl"将 ElasticSearch 连接到 Django 导致在尝试创建/重建索引时出现 ConnectionError

mapping - Elasticsearch 如何在ouchdb的附件文件中找到单词?

kubernetes 上的 elasticsearch - 节点发现

python - 如何将 datetime.date 从 mysql 转换为 unix 时间戳

sql - Oracle 中的月日比较