PUT gudongtest004
"settings": {
"number_of_replicas": 0
"mappings": {
"_doc": {
"_all": {
"enabled": false
"properties": {
"date": {
"type": "date",
"format": "yyyy-MM-dd HH:mm:ss",
"store": true
"message": {
"type": "keyword",
"doc_values": false
PUT gudongtest004/_doc/1
"date": "2023-02-28 00:01:10",
"message": "trying out Elasticsearch",
"time_zone": "+08:00"
PUT gudongtest004/_doc/2
"date": "2023-02-28 00:01:10",
"message": "trying out Elasticsearch"
PUT gudongtest004/_doc/3
{ "date": "1677546070000","message":"trying out Elasticsearch" }
PUT gudongtest004/_doc/4
{ "date": "1677546070000","message":"trying out Elasticsearch","time_zone": "+08:00" }
GET gudongtest004/_search
"stored_fields": [
"date"
"query": {
"match_all": {}
POST gudongtest004/_doc/5
"date":"2019-12-11T08:00:00+08:00"
- 创建索引的时候无法指定时区
- 采用单一字符串格式时,写入和查询是可以忽略时区。
- ES内部的时区是0时区
- 写入字符串没问题,写入时间戳时会少八个小时(因为我们在东八区)
- 在时间戳与字符串格式混用的场景下,最好查询时,统一以时间戳作为查询条件。
- 混用多个字符串格式没有问题,尽量不要混时间戳
彩蛋:在_ingest
中结合timezone
控制写入时区
PUT _ingest/pipeline/chage_utc_to_asiash
"processors": [
"date" : {
"field" : "my_time",
"target_field": "my_time",
"formats" : ["yyyy-MM-dd HH:mm:ss"],
"timezone" : "Asia/Shanghai"
PUT gudongtest005
"settings": {
"default_pipeline": "chage_utc_to_asiash",
"number_of_replicas": 0
"mappings": {
"_doc": {
"properties": {
"my_time": {
"type": "date"
PUT gudongtest005/_doc/1
"my_time": "2021-08-09 08:07:16"
GET gudongtest005/_search
"query": {
"match_all": {}
"my_time": "2021-08-09T08:07:16.000+08:00"
Elasticsearch数据格式插件
Elasticsearch数据格式插件提供了一项功能,使您可以将搜索结果的响应下载为JSON以外的其他几种格式。 支持的格式为CSV,Excel,JSON(批量),JSON(对象列表)和GeoJSON。
问题/问题
$ $ES_HOME/bin/elasticsearch-plugin install org.codelibs:elasticsearch-dataformat:7.6.0
支持的输出格式
该插件可让您以所需格式下载数据。 默认情况下,将返回100首匹配。 您可以自定义使用from和size查询参数返回的匹配。 如
最近在存储数据到es中,总会有各种各样的问题,找遍了全网,也没有发现一个总结的比较好的,特此个人总结一下。
1.在使用log(elk,logstash)存储数据到elk时,因为用的是带时区的方法,也就是:
yyyy-MM-dd'T'HH:mm:ss:SSS'Z'
这种格式,默认是UTC时间,东八区需要+8小时,所以在打日志的时候存储其他时间时:
时间不要以这种格式:
yyyy-MM-...
开发中,我们可能需要将时区类的时间转换成我们能够理解的且表示正常的date类型(这些场景在数据库时间字段比较常见,如mongo和es,他们储存的时候时间是0时区表示),实例如下:
String time = "2020-09-27T03:57:30.003Z";
String timeStart = time.replace("Z", " UTC");
System.out.println(timeStart);
SimpleDateFormat format
需求,日志收集的时候,时间格式是国际标准时间格式。形如yyyy-MM-dd'T'HH:mm:ss.SSS。 (2023-12-05T02:45:50.282Z)这个时区也不对,那如何将此类型的时间,进行格式化呢?
本篇文章体统一个案例,可以格式化各种类型的时间,已经调整到各个时区。
本文主要讲解Elasticsearch中date类型数据的底层存储原理,以及对带时区日期字符串和不带时区的日期字符串如何在ES底层存储进行验证。对于直接存储Long类型时间戳,不作过多描述。
1.1 Date类型数据的存储
UTC(Universal Time Coordinated) 叫做世界统一时间,中国大陆所用的时间是东8区时间,比UTC时间超前8小时。即与 UTC 的时差是 +8 ,也就是 UTC+8。
在Elasticsearch内部,不论 date 是什么展示格式,所有date类型数据
我们在做 Java 开发过程中其实很少关心时区的问题,因为这个一般都使用系统默认的东八区了,所以在存储时间和查询时间时感觉不到时区的存在,以及可能会发生的问题。但是有 ES(Elasticsearch)开发经验的朋友可能或多或少都遇到或者处理过 ES 中的日期类型的时区问题,当遇到此类问题时可能也会很快解决,因为网上教程很多,如何设置、如何指定日期格式,等等,但是并不见得会深度研究。
当然,对于一个一直对时区、什么GMT+8、UTC总是一知半解的我来说,总是感觉...
就不重复了,简单总结下我的几点感受吧:
1. 不要直接下载spark源码再checkout[release到]分支,跟直接下载的release包比起来,很多文件不一样,尤其是pom,我今天就是深受其害,改了半天依赖最后还是编译失败了,但是,通过release包编译直接成功!!!没有任务多余的操作。
2. 很惭愧,写了几年代码也搞了几年大数据,源码编译的经历却很少,在windows上就更好了,之前一直疑惑都是sh文件我在win上咋弄啊,但又不想自己折腾docker或者虚拟机,今天才知道可以使用git!!!
总之,太感谢大佬了,向大佬致敬,活到老学到老 。。。
请允许我贴个完整的编译日志: `https://gitee.com/xiaofeng24/source-code-compile.git`