當您在時序情境下,按照時間範圍過濾資料進行查詢,遇到資料量增大後查詢延遲增大的問題時,可通過時序查詢剪枝功能提高查詢效能。本文介紹時序查詢剪枝功能的使用方法。
前提條件
已建立Elasticsearch執行個體,且執行個體版本為6.7.0,核心版本為1.2.0及以上,或者執行個體版本為7.10.0。建立執行個體的方法請參見建立Elasticsearch執行個體。
背景資訊
與原生Elasticsearch相比,Elasticsearch使用了時序查詢剪枝功能後,在段合并策略和查詢效能方面的對比如下。
產品 | 段合并策略 | 效能 |
原生Elasticsearch | 按檔案大小相似性進行合并,類似分層合并。其最大優點是合并高效,但不能保證資料的連續性。 | 查詢時需掃描全部資料,效能損耗嚴重。 |
Elasticsearch使用時序查詢剪枝功能 | 引入時序欄位參與索引合并,合并過程中考慮了時間順序和檔案大小兩個因素,時間相鄰的資料會被合并在同一個段,提升資料連續性。 | 查詢時按時間範圍對資料進行裁剪,查詢效能提升了40%。 |
本文中的命令均可在Kibana控制台中執行,詳情請參見登入Kibana控制台。
注意事項
目前僅執行個體版本為6.7.0、核心版本為1.2.0及以上,或者執行個體版本為7.10.0的Elasticsearch執行個體支援時序查詢剪枝功能。
請在建立索引時開啟時序查詢剪枝功能,在建立後開啟會影響查詢效能的提升。
當關閉索引的時序查詢剪枝功能後,建議不要再次開啟。如果再次開啟,當對應索引的段合并中存在非時序資料時,會影響查詢效能的提升。
開啟時序查詢剪枝功能
在建立索引時,為該索引開啟時序查詢剪枝功能並指定時序欄位。
PUT index-1/_settings
{
"index" : {
"merge.policy.time_series_field" : "timestamp"
}
}
時序欄位的類型必須為date或long類型。
根據指定時序欄位查詢資料
如下樣本,根據指定的時序欄位timestamp,過濾資料後再進行查詢。
POST index-1/_search
{
"query": {
"bool": {
"filter": [
{
"range": {
"timestamp": {
"format": "yyyy-MM-dd HH:mm:ss",
"gte": "2020-06-01 23:00:00",
"lt": "2020-06-06 23:05:00",
"time_zone": "+08:00"
}
}
},
{
"terms": {
"region": [
"sh"
]
}
}
]
}
}
}
關閉時序查詢剪枝功能
關閉索引。
POST index-1/_close
更新索引
settings
,關閉該索引的時序查詢剪枝功能。PUT index-1/_settings { "index" : { "merge.policy.time_series_field" : null } }
重新開啟索引。
POST index-1/_open