ES系列 按時段查詢資料

2021-10-14 13:51:46 字數 2272 閱讀 8984

今天遇到乙個問題,es裡有個date欄位,儲存的是2020-12-28t16:16:22.000z日期+時間,現在有個查詢任意時段內的資料,不考慮日期,例如,查詢08:10:0018:00:00之間的資料。這種情況下,可以使用script進行查詢或過濾。

查詢語句:

}]

}}}

上面只是示例,這裡使用second_of_day,是因為我這裡不僅僅是小時,還包括秒。如果僅僅是小時範圍內的,可以使用gethour()

7.0版本對方法進行了替換,可以檢視變更裡的說明:

getdayofweek() will be an enum instead of an int, if you need to use an int, use getdayofweekenum().getvalue()

getmillis() should be replaced with toinstant().toepochmilli()

getcenturyofera() should be replaced with get(chronofield.year_of_era) / 100

getera() should be replaced with get(chronofield.era)

gethourofday() should be replaced with gethour()

getmillisofday() should be replaced with get(chronofield.milli_of_day)

getmillisofsecond() should be replaced with get(chronofield.milli_of_second)

getminuteofday() should be replaced with get(chronofield.minute_of_day)

getminuteofhour() should be replaced with getminute()

getmonthofyear() should be replaced with getmonthvalue()

getsecondofday() should be replaced with get(chronofield.second_of_day)

getsecondofminute() should be replaced with getsecond()

getweekofweekyear() should be replaced with get(weekfields.iso.weekofweekbasedyear())

getweekyear() should be replaced with get(weekfields.iso.weekbasedyear())

getyearofcentury() should be replaced with get(chronofield.year_of_era) % 100

getyearofera() should be replaced with get(chronofield.year_of_era)

tostring(string) should be replaced with a datetimeformatter

tostring(string,locale) should be replaced with a datetimeformatter

當然上面的寫法有乙個問題,因為es對指令碼會進行編譯並儲存在快取中,上面我們把變數寫死為10,86399,會導致下一次傳遞新的引數時,es會重新編譯並儲存。

如果短時間內編譯多次,es會拒絕並向外拋錯。對於大多數上下文,預設情況下每5分鐘最多可以編譯15個指令碼。對於ingest 上下文,預設指令碼編譯速率是無限的。這個設定可以修改。

更好的辦法是我們對變數通過引數傳入,這裡以小時過濾為例吧,例如:

}}

}}}}

還有一種方式是,先儲存這個指令碼,然後通過id呼叫指令碼

# 儲存指令碼

post _scripts/mytest-script

}# 查詢}}

}}}}

# 暫時不知道如何查詢所有已存在指令碼。。。

# 檢視指令碼內容

get _scripts/mytest-script

# 刪除指令碼

delete _scripts/mytest-script

ES查詢按時時間過濾

資料量 document 大概有2kw 每個document下有乙個nest陣列結構,資料量最多能達到上百個,每個陣列的元素中有個expire time,搜尋時會通過expire time進行過濾操作 搜尋時 es的時間過濾 0 size 100 query gt對時間的操作效能有很大的影響 分鐘級...

MS Access 按時間段查詢資料

access 總是有各種各樣的坑。比如資料查詢需要按時間段進行查詢,需要精確到秒 查詢一 不能用 select from yourtable where yourtimefield 2014 04 04 14 24 03 and yourtimefield 2014 04 04 14 24 05 看...

es父子結構查詢 ES 系列3 ES 檢索原理

索引原理 磁碟io與預讀 倒排索引 fst索引是加速資料查詢的重要手段,其核心原理是通過不斷的縮小想要獲取資料的範圍來篩選出最終想要的結果,同時把隨機的事件變成順序的事件。也就是說,有了這種索引機制,我們可以總是用同一種查詢方式來鎖定資料。磁碟io程式設計中非常高昂的操作,也是影響程式效能的重要因素...