Elasticsearch Date

3 min read
1. Các đơn vị thời gian trong Elasticsearch
Ký hiệu | Đơn vị thời gian |
y | Năm |
M | Tháng |
w | Tuần |
d | Ngày |
h | Giờ |
m | Phút |
s | Giây |
2. Các toán tử làm việc với Date
Elasticsearch hỗ trợ các toán tử cộng (+), trừ (-), làm tròn (/) đối với dữ liệu Date. Cụ thể như sau:
Toán tử | Ý nghĩa | Ví dụ | Chi tiết |
+y | Cộng năm vào thời điểm gốc | now+1y | Thời điểm 1 năm sau hiện tại |
-y | Trừ năm khỏi thời điểm gốc | now-2y | Thời điểm 2 năm trước hiện tại |
+M | Cộng tháng | now+3M | 3 tháng sau |
-d | Trừ ngày | now-7d | 7 ngày trước |
+h | Cộng giờ | now+5h | 5 giờ sau |
+m | Cộng phút | now+30m | 30 phút sau |
-s | Trừ giây | now-10s | 10 giây trước |
/y | Làm tròn về đầu năm | now-1y/y | Đầu năm ngoái |
/M | Làm tròn về đầu tháng | now+2M/M | Đầu 2 tháng sau |
/d | Làm tròn về đầu ngày | now+1d/d | Đầu ngày hôm sau(00:00:00) |
… |
Cấu trúc Date Math ở trên sẽ có dạng
<anchor><math><rounding>
<anchor>
: Mốc thời gian ban đầu — thường lànow
<math>
: Cộng/trừ thời gian như+1d
,-2M
<rounding>
: Làm tròn về đầu đơn vị, ví dụ/d
,/M
3. Query Date
Để truy vấn trường dữ liệu kiểu Date, ta có thể sử dụng các loại query sau:
- Query range
Toán tử | Ý nghĩa |
gt | Greater than (lớn hơn) |
gte | Greater than or equal (lớn hơn hoặc bằng) |
lt | Less than (nhỏ hơn) |
lte | Less than or equal (nhỏ hơn hoặc bằng) |
format | Chỉ định định dạng ngày |
{
"query": {
"range": {
"order_date": {
"gte": "2023-01-01",
"lte": "2023-12-31",
"format": "yyyy-MM-dd"
}
}
}
}
-------------------------------------------------------
{
"query": {
"range": {
"timestamp": {
"gte": "now-7d/d",
"lte": "now"
}
}
}
}
- Query date_histogram
Field | Ý nghĩa | |
calendar_interval | Phân nhóm theo mốc thời gian (day, week, month...) | |
fixed_interval | Khoảng thời gian cố định (ví dụ: "12h", "1d") | |
offset | Dịch thời gian nhóm |
{
"aggs": {
"sales_per_month": {
"date_histogram": {
"field": "sale_date",
"calendar_interval": "month",
"offset": "+5h"
}
}
}
}
Query date_range
{ "aggs": { "orders_by_range": { "date_range": { "field": "order_date", "ranges": [ { "to": "now-1M/M" }, { "from": "now-1M/M", "to": "now" }, { "from": "now" } ] } } } }
Notes:
from
và to
tương ứng với gte
và lt
:
from
→gte
to
→lt
Nếu muốn bao gồm cả ngày cuối cùng (to
), dùng to
kết hợp "include_upper": true
.
0
Subscribe to my newsletter
Read articles from littlenotes directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
