如果想要提升 Elasticsearch 的查詢效能,例如減少查詢的時間,以下有幾個方法可以達成。
檢查索引資訊
我們可以透過檢查索引資訊、系統負載,先了解目前的系統狀態。
檢查索引資訊的 API (請自行代換網址):
https://localhost:9200/_cat/indices?v
檢視系統負載的 API。不過在部分作業系統或執行環境下,可能無法顯示所有欄位的資訊 (請自行代換網址):
https://localhost:9200/_nodes/stats/os
使用 Kibana 的 Search Profiler 檢查查詢時間
接著我們可開啟 Kibana,透過 Management → DevTools 找到 Search Profiler,這個工具可以用來分析查詢時間的成分。
Search Profiler 是透過呼叫 Profiler API 取得測量結果,並視覺化呈現。View details 內的項目說明可參考解釋 (不知道為什麼只有簡體的說明 …. )。
PS. 由於增加了分析的紀錄,查詢時間花得比一般查詢更久是正常的。
- Search Profiler 請參考:Profile queries and aggregations - Kibana Guide [8.15] - Elastic
- 關於 Search Profiler 和其它效能微調的說明:Tune for search speed - Elasticsearch Guide [8.15] - Elastic
使用 Reindex 改進查詢效能
Reindex 除了可以改變原有資料的結構、索引配置以外,也能調整 Shard (分片) 的數量,或重新分片,使分片內的資料分布更平均,增進查詢效能。
改善效能的幾種做法
- 如果每個文件都有特定的字詞,那麼搜尋到該字詞時,會需要計算所有文件的分數,速度就會變慢。
- 不要濫用 Script 撰寫計分或判斷邏輯,很容易拖慢時間。
- 要調整 Primary Shard,適度分隔資料,以增加搜尋效率。
另外也可以參考以下網頁: