全部產品
Search
文件中心

Elasticsearch:使用時序查詢剪枝功能

更新時間:Jun 30, 2024

當您在時序情境下,按照時間範圍過濾資料進行查詢,遇到資料量增大後查詢延遲增大的問題時,可通過時序查詢剪枝功能提高查詢效能。本文介紹時序查詢剪枝功能的使用方法。

前提條件

已建立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"
                        ]
                    }
                }
            ]
        }
    }
}

關閉時序查詢剪枝功能

  1. 關閉索引。
    POST index-1/_close
  2. 更新索引settings,關閉該索引的時序查詢剪枝功能。
    PUT index-1/_settings
    {
        "index" : {
            "merge.policy.time_series_field" : null
        }
    }
  3. 重新開啟索引。
    POST index-1/_open