본문 바로가기

Elasticsearch

[Elasticsearch] date format 날짜 형식 정리

반응형

Elasticsearch date foramt 

 

elasticsearch date 날짜에 사용할 수 있는 형식들 알아보기 

 

Es에서 사용할 수 있는 형식은 Date math 표현,  이미 가지고 있는(built in formats) 규격 형식들과 커스텀 형식 이렇게 총 3가지로 나누어진다. 

 

 

1. Date math expression

Date Math 에 대해서는 예전에 작성한 포스팅 참고!

 

[Elasticsearch] Data Math 개념과 계산하는 방법

Elasticsearch range queries에서 또는 datarange aggregations에서 사용되는 Date Math 알아보기 1) 기본 단위들 기본 단위들은 아래와 같다. supported units y Years M Months w Weeks d Days h Hours H Hours m Minutes s Seconds 그리

blckchainetc.tistory.com

 

 

 

2. Built in Formats

Elasticsearch built in formats 
Date 형식 이름 설명 예시
epoch_millis A formatter for the number of milliseconds since the epoch 
* UNIX epoch : 1970.1.1 부터의 ms 시간
ex) 1668138258553
basic_date 4자리 연도 + 2자리 월 + 2자리 일 ex) yyyyMMdd
basic_date_time basic_date + time / separater - T ex) yyyyMMdd'T'HHmmss.SSSZ
basic_date_time_no_millis basic_date_time에서 millis를 제외
* millis = millisecond = 1/1000초 
ex) yyyyMMdd'T'HHmmssZ
date_optional_time 시간이 옵셔널한 형식 ex) yyyy-MM-dd'T'HH:mm:ss.SSSZ or yyyy-MM-dd
date 4자리 연도 + 2자리 월 + 2자리 일 Ex) yyyy-MM-dd
date_time a full date + time ex) yyyy-MM-dd'T'HH:mm:ss.SSSZ

 

아래의 형식 이름 앞에 "strict_" 을 붙여주면 사용하면 모든 year, month, day 가 자리수는 엄격하게 맞추어라~ 의미가 된다. Ex.2022/2/10으로 작성하면 에러가 나고 2022/02/10 처럼 "0"을 넣어주어야 한다. -> 이 방법은 dynamic mapping할 때 불필요한 string값이 Date로 자동 설정되지 않도록 할 때 유용한다. 

ex) strict_date_optional_time

 

이 외에도 굉장히 많은 형식들이 존재한다! -> es doc 

 

Mapping되어 있지 않은 인덱스에 위의 형식들의 날짜 데이터를 입력할 때 모두 데이터로 자동 매핑되지않는다. 때문에 아래처럼 index 생성 시에 mapping을 함께 해주면 된다. 

 

PUT test_date_format
{
  "mappings": {
    "properties": {
      "testDate": {
        "type": "date",
        "format": "yyyyMMdd||strict_date_optional_time"
      }
    }
  }
}

 

 

 

 

3. Custom date format 

index 생성 시 mappings에 날짜 형식을 내가 사용할 커스텀 형식을 설정해 준다. 

 

PUT test_date2
{
  "mappings": {
    "properties": {
      "testDate": {
        "type":"date",
        "format": "dd/MM/yyyy"
      }
    }
  }
}

 

데이터 입력하기 

POST test_date2/_doc
{
  "testDate": "11/11/2022"
}

 

사용자 정의 형식은 내가 정한 것만 데이터가 입력되고 그 외의 형식들 (yyyy-MM-dd 등) 은 입력하게되면 오류가 난다. 

 

 

 

다른 예제

PUT test_date2
{
  "mappings": {
    "properties": {
      "testDate": {
        "type":"date",
        "format": "dd/MM/yyyy||yyyy년MM월dd일HH시mm분ss초"
      }
    }
  }
}

데이터 입력

POST test_date2/_doc
{
  "testDate": "2022년10월11일10시22분33초"
}

검색 결과 

    "hits" : [
      {
        "_index" : "test_date2",
        "_type" : "_doc",
        "_id" : "mPBLZYQBlQUEkepaewXs",
        "_score" : 1.0,
        "_source" : {
          "testDate" : "2022년10월11일10시22분33초"
        }
      },
      {
        "_index" : "test_date2",
        "_type" : "_doc",
        "_id" : "7fBLZYQBlQUEkepaxwVB",
        "_score" : 1.0,
        "_source" : {
          "testDate" : "11/11/2022"
        }
      }
    ]

 

 

 

 

Reference : https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-date-format.html

반응형