当前位置: 首页 > 面试题库 >

ElasticSearch Spring-Data Date格式总是很长

宗政深
2023-03-14
问题内容

当使用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,等等)。



 类似资料:
  • 我在使用Apache POI3.9阅读Excel表中的条件格式时遇到了困难。Excel文件是使用MS Excel2010创建的,添加了一些条件格式(我解压缩了。xlsx文件,检查了sheet1.xml,它有几个x14:ConditionalFormatting标记),但是sheet.getSheetConditionalFormatting().getNumConditionalFormattin

  • 当我尝试在日期格式选项中使用正确的数据(包括时间,例如:2018-01-01 07:00:00))添加或编辑新行时,我尝试在日期格式选项中使用“newform: Y-m-d H: i: s”总是返回无效的日期警告。 有人能帮我把它正常工作吗? JSFIDLE:链接

  • 本文向大家介绍js严格模式总结(分享),包括了js严格模式总结(分享)的使用技巧和注意事项,需要的朋友参考一下 首页,我们要理解严格模式的概念,严格模式是一种特殊的执行模式,它修复了部分语言上的不足,提供更强的错误检查,病增强安全性。可以对部分函数进行执行严格模式,如: function func(){ 'use strict' } 也可以对整个js文件进行执行严格模式,如: 'use stric

  • 此代码给出了预期的XML输出: 但当我试图通过更改以json格式获取数据时: @产品(MediaType.APPLICATION_XML)到@产品(媒体类型。APPLICATION_JSON),我得到一个错误: 严重:未找到媒体类型为application/json,类型为class-com的MessageBodyWriter。市场。英亩。dummyapp。测验ForTest,genericTyp

  • 本文向大家介绍javascript日期格式化方法汇总,包括了javascript日期格式化方法汇总的使用技巧和注意事项,需要的朋友参考一下 方法一: 调用方式: var time1 = new Date().Format("yyyy-MM-dd"); var time2 = new Date().Format("yyyy-MM-dd HH:mm:ss");  方法二: 方法三: 方法四: 方法五:

  • 本文向大家介绍JS严格模式知识点总结,包括了JS严格模式知识点总结的使用技巧和注意事项,需要的朋友参考一下 所谓严格模式其实就是一个不会赋值给任何变量的字符串 “use strict” 如果在全局作用域下 给出这个提示,那整个脚本将采用严格模式。也可以只在函数中打开严格模式 1.严格模式下没有全局变量 a="test" 严格模式下会报错,非严格模式下正常 2.删除变量 var 有三种声明的情形 v