當您在時序場景下,按照時間范圍過濾數據進行查詢,遇到數據量增大后查詢延遲增大的問題時,可通過時序查詢剪枝功能提高查詢性能。本文介紹時序查詢剪枝功能的使用方法。
前提條件
已創建阿里云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
文檔內容是否對您有幫助?