Heyo,我正在尝试使用Kibana创建索引模式,为此我需要在Elasticsearch中解析日期“2018年4月10日,07:32:45.987”。我的问题是10之后的“th”.Elasticsearch文档指出了joda-time文档:http://www.joda.org/joda-time/apidocs/org/joda/time/format/DateTimeFormat.html,但这并没有告诉我它如何忽略或解析这两个字符。到目前为止,我有:
PUT mynewindex
{
"mappings": {
"mytype" : {
"properties": {
"syslog-timestamp" : {
"type" : "date",
"format" : "MMM dd?? yyyy, HH:mm:ss.SSS"
}
}
}
}
}
什么应该取代我的问号?
在Java中它看起来像这样:
import org.joda.time.DateTime;
import org.joda.time.format.DateTimeFormat;
import org.joda.time.format.DateTimeFormatter;
public class JodaTimeTest {
public JodaTimeTest() {
String timeString = "April 10th 2018, 07:32:45.987";
DateTimeFormatter formatter = DateTimeFormat.forPattern("MMM dd'th' yyyy, HH:mm:ss.SSS||MMM dd'nd' yyyy, HH:mm:ss.SSS||MMM dd'rd' yyyy, HH:mm:ss.SSS");
DateTime dt = formatter.parseDateTime(timeString);
}
public static void main(String[] args) {
new JodaTimeTest();
}
}
我尝试了给定的解决方案,但结果是:
Exception in thread "main" java.lang.IllegalArgumentException: Invalid format: "April 10th 2018, 07:32:45.987" is too short
at org.joda.time.format.DateTimeFormatter.parseDateTime(DateTimeFormatter.java:945)
at JodaTimeTest.<init>(JodaTimeTest.java:11)
at JodaTimeTest.main(JodaTimeTest.java:15)
额外信息:
GET myindex/_search
{
"query": {
"range" : {
"date" : {
"gt" : "now"
}
}
}
}
什么都不返回,
GET myindex/_search
{
"query": {
"range" : {
"date" : {
"lt" : "now"
}
}
}
}
也不会返回任何内容。
答案 0 :(得分:1)
您需要这样做,并考虑nd
和rd
的日期:
PUT mynewindex
{
"mappings": {
"mytype" : {
"properties": {
"syslog-timestamp" : {
"type" : "date",
"format" : "MMM dd'th' yyyy, HH:mm:ss.SSS||MMM dd'nd' yyyy, HH:mm:ss.SSS||MMM dd'rd' yyyy, HH:mm:ss.SSS"
}
}
}
}
}
答案 1 :(得分:0)
Val的答案不起作用,因为||不支持运算符。对于这个有限的测试,我写了一个脚本来从日志文件中删除st,nd和rd。如果测试成功,将更改haproxy以输出没有st,nd和rd的日期。