ElasticSearch Spring-Data Date格式总是很长

当使用spring-data插入Date类型的Elasticsearch文档时,我无法获得正确的日期格式,日期格式始终为Long。

这是Java代码:Entity.java

import java.util.Date;

import org.springframework.data.annotation.Id;

import org.springframework.data.elasticsearch.annotations.DateFormat;

import org.springframework.data.elasticsearch.annotations.Document;

import org.springframework.data.elasticsearch.annotations.Field;

import org.springframework.data.elasticsearch.annotations.FieldIndex;

import org.springframework.data.elasticsearch.annotations.FieldType;

import com.fasterxml.jackson.annotation.JsonProperty;

@Document(indexName = "entity-index", type = "entity-type")

public class Entity {

@Id

private String id;

@Field(type = FieldType.Date, index = FieldIndex.not_analyzed, store = true,

format = DateFormat.custom, pattern = "yyyy-MM-dd'T'hh:mm:ss.SSS'Z'")

private Date createDate;

private String system;

private double score;

@Field(type = FieldType.Date, format = DateFormat.date_optional_time)

@JsonProperty(value = "@timestamp")

private Date updateDate;

// omit setter and getter

}

这是测试

public class EntityDAOTest {

@Autowired

private ElasticsearchTemplate template;

@Before

public void init() {

template.createIndex(Entity.class);

template.putMapping(Entity.class);

}

@Test

public void testCreate() {

Entity entity = new Entity();

entity.setId("5");

entity.setCreateDate(new DateTime(2015,05,27,0,0).toDate());

entity.setUpdateDate(new DateTime(2015,05,27,0,0).toDate());

entity.setSystem("systemC");

entity.setScore(5.7);

IndexQuery query = new IndexQueryBuilder().withObject(entity).withId(entity.getId()).build();

template.index(query);

}

我可以获取创建的实体的映射:

{

"entity-index": {

"mappings": {

"entity-type": {

"properties": {

"@timestamp": {

"type": "long"

},

"createDate": {

"type": "date",

"store": true,

"format": "yyyy-MM-dd'T'hh:mm:ss.SSS'Z'"

},

"id": {

"type": "string"

},

"score": {

"type": "double"

},

"system": {

"type": "string"

},

"updateDate": {

"type": "date",

"format": "date_optional_time"

}

}

}

}

}

}

但是,当我搜索它时curl -X GET /entity-index/_search,会得到以下文档:

 {

"id": "5",

"createDate": 1432656000000,

"system": "systemC",

"score": 5.7,

"@timestamp": 1432656000000

}

并且“日期”字段均为长型,如何获取日期格式:“ 2015-08-17T12:00:00.000”?

回答:

您的映射已正确创建。该问题更有可能来自Jackson JSON序列化程序。您应该尝试将此注释添加到日期字段:中@JsonFormat (shape =

JsonFormat.Shape.STRING, pattern ="yyyy-MM-dd'T'HH:mm:ss.SSSZZ")

还有一些其他解决方案可能更适合您的情况(即,创建一个CustomDateSerializer,等等)。

以上是 ElasticSearch Spring-Data Date格式总是很长 的全部内容, 来源链接: utcz.com/qa/420570.html

回到顶部