我有一个索引,其中 dataField
定义为:
"ts":{"type":"date","format":"strict_date_optional_time||epoch_millis"}
当我尝试使用:
进行rangeQuery
时 gte=1522871220000, lte=1522881220000
格式
DateTime.parse(source.get("ts").get.asInstanceOf[String],
DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ"))
我得到:
java.lang.IllegalArgumentException:非法模式组件:P 在org.joda.time.format.datetimeformat.parsepatternto(dateTimeFormat.java:566( at org.joda.time.format.datetimeformat.createformatterforpattern(dateTimeFormat.java:687( at org.joda.time.format.datetimeformat.forpattern(dateTimeFormat.java:177(
当我进行curl
查询以在我的索引上搜索时,我会看到:
"ts" : "2018-04-05T01:18:15.218Z"
为什么我会得到这个例外?
forPattern
方法中发生了此异常,因此应引起的代码是:
DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ")
但这并没有引发任何例外。我获得同样例外的唯一方法是,当我将p
放在模式字符串中:
// this throws the same exception you've got
DateTimeFormat.forPattern("pyyyy-MM-dd'T'HH:mm:ss.SSSZ")
^
那是因为p
不是模式中允许的字母之一 - 有关更多信息,请参见Javadoc:http://www.joda.org/joda time/apidocs/apidocs/org/org/joda/joda/time/time/format/dime/datement/datetimeformat。html
无论如何,我有一些猜测:
- 这不是产生异常的代码
- 您可能会在其他地方或您使用的API中创建其他一些格式化器(并且它正在尝试在模式中使用
p
创建一个格式化器(