7.2.3 날짜 - date
이 문서의 허가되지 않은 무단 복제나 배포 및 출판을 금지합니다. 본 문서의 내용 및 도표 등을 인용하고자 하는 경우 출처를 명시하고 김종민(kimjmin@gmail.com)에게 사용 내용을 알려주시기 바랍니다.
Elasticsearch 에서 날짜 타입은 ISO8601 형식을 따라 입력을 합니다. 일반적으로 다음과 같은 형태로 입력된 경우 자동으로 날짜 타입으로 인식이 됩니다.
"2019-06-12"
"2019-06-12T17:13:40"
"2019-06-12T17:13:40+09:00"
"2019-06-12T17:13:40.428Z"
위와 같은 ISO8601 형식이 아니라 "2019/06/12 12:10:30" 와 같이 입력하면 보통은 text, keyword 로 저장됩니다. 이 외에도 1550282065513 와 같이 long 타입의 정수인 epoch_millis 형태의 입력도 가능합니다. epoch_millis 는 1970-01-01 00:00:00 부터의 시간을 밀리초 단위로 카운트 한 값입니다. 필드가 date 형으로 정의 된 이후에는 long 타입의 정수를 입력하면 날짜 형태로 저장이 가능합니다. "2019/06/10 12:10:30" 같은 형식으로 날짜를 저장하려면 format 옵션을 사용해서 형태를 지정해야 합니다.
다음은 날짜 타입에서 사용 가능한 옵션들입니다.
"doc_values"
,"index"
,"null_value"
,"ignore_malformed"
옵션들은 문자열, 숫자 필드와 기능이 동일합니다."format" : "<문자열 || 문자열 ...>"
입력 가능한 날짜 형식을 || 로 구분해서 입력합니다.
다음은 my_date 인덱스에서 "2019/06/10", "2019-06-10 12:10:30" 그리고 epoch_millis 형태로 입력받도록 date_val 날짜 필드를 지정하는 예제입니다.
long 타입의 정수형은 epoch_millis 외에도 epoch_second 의 사용이 가능합니다. 그 외에도 basic_date, strict_date_time 등과 같이 미리 정의 된 포맷을 이용하거나, joda.time.format 심볼을 사용하여 지정할 수 있습니다.
정의된 포맷들은 Elastic 홈페이지의 공식 도큐먼트 https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-date-format.html 페이지에서 볼 수 있으며, joda 심볼 기호들은 다음과 같습니다.
날짜 필드는 입력된 값들을 실제로 내부에서는 모두 long 형태의 epoch_millis 로 저장합니다. 또한 매핑의 format 형식만 지정 해 놓으면 지정된 어떤 형식으로도 색인 및 쿼리가 가능합니다. 다시 말해 _source 의 날짜 는 "2019-09-12" 형식으로 입력 되었어도 "2019/09/12" 형식으로 range 쿼리를 해도 정상적으로 동작합니다. range 쿼리는 5장 검색에서 확인 하시기 바랍니다.
다음은 앞에서 선언한 my_date 인덱스에 "date_val": "2019-09-12 15:01:23"
인 도큐먼트를 입력하고 "2019/09/10" 보다 크고 "2019-09-13 12:00:00" 의 epoch_millis 값인 1568332800000 보다 작은 값을 검색하는 쿼리입니다.
입력된 포맷과 검색 쿼리 포맷이 달라도 정상적으로 검색되는 것을 확인할 수 있습니다.
Last updated