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

时间:2018-04-05 01:22:04

标签: datetime elasticsearch jodatime

我有一个索引,dataField定义为:

"ts":{"type":"date","format":"strict_date_optional_time||epoch_millis"}

当我尝试使用{<1}}时使用:

rangeQuery

格式

gte=1522871220000, lte=1522881220000

我明白了:

  

java.lang.IllegalArgumentException:非法模式组件:p       at org.joda.time.format.DateTimeFormat.parsePatternTo(DateTimeFormat.java:566)       at org.joda.time.format.DateTimeFormat.createFormatterForPattern(DateTimeFormat.java:687)       在org.joda.time.format.DateTimeFormat.forPattern(DateTimeFormat.java:177)

当我DateTime.parse(source.get("ts").get.asInstanceOf[String], DateTimeFormat.forPattern("yyyy-MM-dd'T'HH:mm:ss.SSSZ")) 查询我的索引时,我看到:

curl

为什么我会收到此异常?

1 个答案:

答案 0 :(得分:0)

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/org/joda/time/format/DateTimeFormat.html

无论如何,我有一些猜测:

  • 这不是产生异常的代码
  • 您可能会在其他地方创建其他格式化工具,或者您正在使用的API(并且它正在尝试使用p创建格式化程序在模式中)