사용 가능한 날짜 필드는 세 가지 형태가 있다.
1) Opensearch 내부에 저장되는 형태인 Epoch 이후의 밀리초 형태
Epoch란 보통 1970년 1월 1일 00:00:00 UTC를 의미하고, 이 값은 양수여야 한다.
우리가 알고 있는 컴퓨터 시스템에서 널리 사용되는 Unix Time (유닉스 타임) 이라고 불리는 것과 일치한다.
예를 들면, 1613401200 은 2021년 2월 16일 00:00:00을 밀리초로 변환한 값이다.
- epoch_millis
2) 서식화된 문자열 (Formatted String)
이 형식은 특정 형식으로 표시하는 문자열로, 사람이 읽고 이해하기 쉬운 형태이다.
예를 들면, "2022-09-01T00:00:00" 은 ISO8601 형식에 따라 표현된 문자열이다.
3) Integer Value (초로 변환된 숫자)
이 형식은 에포크 이후의 초 값에 해당한다. 밀리초와 다르게 초 값으로 표현되며, 양수여야 한다.
예를 들면 1613401 은 2021년 2월 16일 00:00:00을 초로 변환한 값이다.
- epoch_second
서식화된 문자열 중에서는 다양한 방식이 있다.
Dates
- basic_date_time : “yyyyMMddTHHmmss.SSSZ”
“20190323T213446.123-04:00”
- basic_date_time_no_millis : “yyyyMMddTHHmmssZ”
“20190323T213446-04:00”
- basic_date : “yyyyMMdd”
“20190323”
Times
- basic_time : “HHmmss.SSSZ”
“213446.123-04:00”
- basic_time_no_millis : “HHmmssZ”
“213446-04:00”
그 외의 다양한 형식은 아래의 링크에서 찾아볼 수 있다.
https://opensearch.org/docs/latest/field-types/supported-field-types/date/
이런 날짜 형식 중에서도 맞춤 (커스텀 날짜 형식)도 가능하다.
PUT testindex
{
"mappings" : {
"properties" : {
"release_date" : {
"type" : "date",
"format" : "MM/dd/yyyy"
}
}
}
}
GET testindex/_search
{
"query" : {
"match": {
"release_date" : {
"query": "03/21/2019"
}
}
}
}
GET testindex/_search
{
"query": {
"range": {
"release_date": {
"gte": "2019-01-01",
"lte": "2019-12-31",
"format": "yyyy-MM-dd"
}
}
}
}
날짜 간의 연산도 가능하다.
1) + : 덧셈
2) - : 빼기
3) / : 반올림
다음의 시간단위를 지원한다.
y(년), M(월), w(주), d(일), h 또는 H (시), m(분), s(초)
예시>
now+1M
2022-05-18||/M -> 2022-05-01
2022-05-18T15:23||/h -> 2022-05-18T15
2022-05-18T15:23:17.789||+2M-1d/d -> 2022-07-17
날짜의 계산과 연산을 이용한 예제
GET testindex/_search
{
"query": {
"range": {
"release_date": {
"gte": "2022-09-14T15:23||/d",
"lte": "2022-09-14||+2M+1d"
}
}
}
}
'Opensearch' 카테고리의 다른 글
OpenSearch QueryDSL - 용어 수준 쿼리 - Range, Regexp (0) | 2024.04.03 |
---|---|
OpenSearch QueryDSL - 용어 수준 쿼리 - IDs, prefix (0) | 2024.04.03 |
OpenSearch QueryDSL - 용어 수준 쿼리 - exists, fuzzy (1) | 2024.04.03 |
OpenSearch QueryDSL - 쿼리 기초 (1) | 2024.04.03 |