弹性搜索查询导致例外非法模式组件:p



我有一个索引,其中 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创建一个格式化器(

相关内容

  • 没有找到相关文章

最新更新