elasticsearch,jodatime,datetime-format,Parsing,Date,elasticsearch,Jodatime,Datetime Format" /> elasticsearch,jodatime,datetime-format,Parsing,Date,elasticsearch,Jodatime,Datetime Format" />

Parsing Elasticsearch无法使用自定义格式分析日期

Parsing Elasticsearch无法使用自定义格式分析日期,parsing,date,elasticsearch,jodatime,datetime-format,Parsing,Date,elasticsearch,Jodatime,Datetime Format,根据文档(),应该可以使用Joda时间兼容的日期模式解析日期 我的数据包含如下日期:“2015-02-09 02:10:05245” 可以使用以下模式使用Joda time解析这些数据:“yyyy-MM-dd-HH:MM:ss,SSS” 但是,当我告诉索引使用此模式解析日期时,将数据加载到Elasticsearch失败,出现以下错误: org.elasticsearch.index.mapper.MapperParsingException: failed to parse [mydate]

根据文档(),应该可以使用Joda时间兼容的日期模式解析日期

我的数据包含如下日期:“2015-02-09 02:10:05245”

可以使用以下模式使用Joda time解析这些数据:“yyyy-MM-dd-HH:MM:ss,SSS”

但是,当我告诉索引使用此模式解析日期时,将数据加载到Elasticsearch失败,出现以下错误:

org.elasticsearch.index.mapper.MapperParsingException: failed to parse [mydate]
    at org.elasticsearch.index.mapper.core.AbstractFieldMapper.parse(AbstractFieldMapper.java:416)
    at org.elasticsearch.index.mapper.object.ObjectMapper.serializeValue(ObjectMapper.java:709)
    at org.elasticsearch.index.mapper.object.ObjectMapper.parse(ObjectMapper.java:500)
    at org.elasticsearch.index.mapper.DocumentMapper.parse(DocumentMapper.java:542)
    at org.elasticsearch.index.mapper.DocumentMapper.parse(DocumentMapper.java:491)
    at org.elasticsearch.index.shard.service.InternalIndexShard.prepareCreate(InternalIndexShard.java:392)
    at org.elasticsearch.action.bulk.TransportShardBulkAction.shardIndexOperation(TransportShardBulkAction.java:444)
    at org.elasticsearch.action.bulk.TransportShardBulkAction.shardOperationOnPrimary(TransportShardBulkAction.java:150)
    at org.elasticsearch.action.support.replication.TransportShardReplicationOperationAction$AsyncShardOperationAction.performOnPrimary(TransportShardReplicationOperationAction.java:512)
    at org.elasticsearch.action.support.replication.TransportShardReplicationOperationAction$AsyncShardOperationAction$1.run(TransportShardReplicationOperationAction.java:419)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
Caused by: org.elasticsearch.index.mapper.MapperParsingException: failed to parse date field [2015-02-09 02:10:05,245], tried both date format [dateOptionalTime], and timestamp number with locale []
    at org.elasticsearch.index.mapper.core.DateFieldMapper.parseStringValue(DateFieldMapper.java:621)
    at org.elasticsearch.index.mapper.core.DateFieldMapper.innerParseCreateField(DateFieldMapper.java:549)
    at org.elasticsearch.index.mapper.core.NumberFieldMapper.parseCreateField(NumberFieldMapper.java:235)
    at org.elasticsearch.index.mapper.core.AbstractFieldMapper.parse(AbstractFieldMapper.java:406)
    ... 12 more
Caused by: java.lang.IllegalArgumentException: Invalid format: "2015-02-09 02:10:05,245" is malformed at " 02:10:05,245"
    at org.elasticsearch.common.joda.time.format.DateTimeFormatter.parseMillis(DateTimeFormatter.java:754)
    at org.elasticsearch.index.mapper.core.DateFieldMapper.parseStringValue(DateFieldMapper.java:615)
    ... 15 more
在索引模板中,“mydate”的指定方式如下:

{
  "template": "te*",
  "mappings": {
    "_default_" : {
      "properties": {
        "mydate": {
          "index": "analyzed",
          "type": "date",
          "format": "yyyy-MM-dd HH:mm:ss,SSS"
        }
      }
    }
  }
}

应该可以了,对吧?

这对我来说在ES 1.4.4上很有用

PUT hilden1

PUT hilden1/type1/_mapping
{
  "properties": {
    "dt": {"type": "date", "format": "yyyy-MM-dd HH:mm:ss,SSS"}
  }
}

POST hilden1/type1
{
  "dt": "2015-02-09 02:10:05,245"
}

GET hilden1/type1/_search

我真的不知道为什么,但我现在有工作要做。我注意到您显式地创建了一个类型“type1”,我依赖于默认值。我更改了索引,将默认值替换为type1,并告诉logstash使用type1作为索引类型。现在它可以工作了。你很可能在一个索引中有很多类型,所以最好的做法是调用它们来帮助我找到我的错误。我的映射声明了错误的
类型
,因此elasticsearch无法映射指定的日期格式。使用正确的类型名称为我解决了问题。