Elasticsearch Date

littlenoteslittlenotes
3 min read

1. Các đơn vị thời gian trong Elasticsearch

Ký hiệuĐơn vị thời gian
yNăm
MTháng
wTuần
dNgày
hGiờ
mPhút
sGiâ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ĩaVí dụChi tiết
+yCộng năm vào thời điểm gốcnow+1yThời điểm 1 năm sau hiện tại
-yTrừ năm khỏi thời điểm gốcnow-2yThời điểm 2 năm trước hiện tại
+MCộng thángnow+3M3 tháng sau
-dTrừ ngàynow-7d7 ngày trước
+hCộng giờnow+5h5 giờ sau
+mCộng phútnow+30m30 phút sau
-sTrừ giâynow-10s10 giây trước
/yLàm tròn về đầu nămnow-1y/yĐầu năm ngoái
/MLàm tròn về đầu thángnow+2M/MĐầu 2 tháng sau
/dLàm tròn về đầu ngàynow+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:

  1. Query range
Toán tửÝ nghĩa
gtGreater than (lớn hơn)
gteGreater than or equal (lớn hơn hoặc bằng)
ltLess than (nhỏ hơn)
lteLess than or equal (nhỏ hơn hoặc bằng)
formatChỉ đị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"
      }
    }
  }
}
  1. Query date_histogram
FieldÝ nghĩa
calendar_intervalPhân nhóm theo mốc thời gian (day, week, month...)
fixed_intervalKhoảng thời gian cố định (ví dụ: "12h", "1d")
offsetDịch thời gian nhóm
{
  "aggs": {
    "sales_per_month": {
      "date_histogram": {
        "field": "sale_date",
        "calendar_interval": "month",
        "offset": "+5h"
      }
    }
  }
}
  1. 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:

fromto tương ứng với gtelt:

  • fromgte

  • tolt

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

littlenotes
littlenotes