spring-data elasticseach存储日期(Date, Time, Timestamp)型的方法

今天碰到一个问题,就是我们要搜索一个日期字段,这个字段在elastic里的存储类型为text,导致搜索出现错误

type=illegal_argument_exception, reason=Text fields are not optimised for operations that require per-document

网上搜了一圈,各种解决方法都不管用。我想,既然这个字段是日期型的,我就用日期型存储在ES中,既少占空间,又能提高搜索效率,何乐而不为之?
于是,在logstash里添加一段,把文本转成日期类型:

date {
    match => [ "logDate", "yyyy-MM-dd HH:mm:ss.SSS" ]
    target => "logDate"
}

然后又按网上说的,在JAVA里对日期一顿注解:

@Field(type = FieldType.Date, format = DateFormat.date_optional_time)
@JsonFormat(shape = JsonFormat.Shape.STRING, pattern ="yyyy-MM-dd'T'HH:mm:ss.SSSZ",timezone="GMT+8")
private Date logDate;

测试一下,还是出错,说是什么日期格式问题,我又想,我java里也是日期型的,ES里也是日期型的,那么它不应该是全部自动搞定吗,为什么还要我注解这么多呢?
于是加到原点,去掉所有的注解:

private Date logDate;

一测试就成功了。原来真是应验了一句古话:大道至简!!!

你可能感兴趣的:(spring,java,elasticsearch)