文章目錄
- 📑引言
- 一、Elasticsearch 索引的基礎概念
- 二、創建索引
- 2.1 使用默認設置創建索引
- 2.2 自定義設置創建索引
- 2.3 創建索引并設置映射
- 三、索引模板
- 3.1 創建索引模板
- 3.2 使用索引模板創建索引
- 四、管理索引
- 4.1 查看索引
- 4.2 更新索引設置
- 4.3 刪除索引
- 五、索引別名
- 5.1 創建索引別名
- 5.2 使用別名查詢
- 5.3 更新索引別名
- 六、分片和副本管理
- 6.1 分片
- 6.2 副本
- 七、索引性能優化
- 7.1 分片數量的選擇
- 7.2 動態調整副本
- 7.3 索引刷新間隔
- 八、索引模板的高級應用
- 九、索引管理工具
- 9.1 Kibana
- 9.2 Curator

📑引言
Elasticsearch 是一個基于 Apache Lucene 的開源搜索引擎,具有分布式、近實時、RESTful API 等特點。索引是 Elasticsearch 的核心概念之一,索引的創建和管理是使用 Elasticsearch 的基礎技能。本文將詳細介紹 Elasticsearch 索引的創建與管理,包括索引的基礎概念、創建索引、索引模板、映射和索引別名等內容。
一、Elasticsearch 索引的基礎概念
在 Elasticsearch 中,索引類似于傳統數據庫中的數據庫。一個索引包含了多個文檔,而每個文檔都包含了多個字段。以下是一些關鍵概念:
- 文檔(Document):Elasticsearch 中的數據單位,類似于數據庫中的一行數據。
- 索引(Index):包含多個文檔,類似于數據庫中的數據庫。
- 類型(Type):在較早版本的 Elasticsearch 中,索引中的一種邏輯劃分,現已棄用。
- 分片(Shard):索引可以分為多個分片,以實現水平擴展和高可用性。
- 副本(Replica):分片的備份,以提高數據的容錯能力。
二、創建索引
2.1 使用默認設置創建索引
Elasticsearch 提供了簡單的創建索引的方法,只需發送一個 HTTP 請求即可。
PUT /my_index
這個命令將在 Elasticsearch 中創建一個名為 my_index
的索引,使用默認的設置和映射。
2.2 自定義設置創建索引
可以在創建索引時自定義分片、副本和其他設置。
PUT /my_index
{"settings": {"number_of_shards": 3,"number_of_replicas": 2}
}
這將創建一個名為 my_index
的索引,包含 3 個主分片和 2 個副本。
2.3 創建索引并設置映射
映射定義了索引中字段的類型及其屬性,可以在創建索引時一起定義。
PUT /my_index
{"settings": {"number_of_shards": 3,"number_of_replicas": 2},"mappings": {"properties": {"name": {"type": "text"},"age": {"type": "integer"},"created_at": {"type": "date","format": "yyyy-MM-dd"}}}
}
這個命令創建了一個索引,并定義了三個字段:name
(文本類型)、age
(整數類型)和 created_at
(日期類型)。
三、索引模板
索引模板允許你為符合特定模式的索引設置默認配置和映射,當索引名稱符合模板定義的模式時,會自動應用模板中的設置和映射。
3.1 創建索引模板
PUT /_template/my_template
{"index_patterns": ["my_index_*"],"settings": {"number_of_shards": 1},"mappings": {"properties": {"name": {"type": "text"},"age": {"type": "integer"}}}
}
這個模板將應用于所有以 my_index_
開頭的索引,并自動設置其分片數量和映射。
3.2 使用索引模板創建索引
當創建符合模板模式的索引時,模板會自動應用:
PUT /my_index_2024
這個命令將創建一個名為 my_index_2024
的索引,并應用 my_template
中定義的設置和映射。
四、管理索引
4.1 查看索引
可以使用以下命令查看索引的詳細信息:
GET /my_index
這個命令將返回索引的配置信息和狀態。
4.2 更新索引設置
索引創建后,可以動態更新一些設置,例如副本數量:
PUT /my_index/_settings
{"number_of_replicas": 1
}
4.3 刪除索引
可以使用以下命令刪除索引:
DELETE /my_index
這個命令將刪除 my_index
索引及其所有數據。
五、索引別名
索引別名允許你為一個或多個索引創建別名,以便于查詢和管理。
5.1 創建索引別名
POST /_aliases
{"actions": [{"add": {"index": "my_index","alias": "my_index_alias"}}]
}
這個命令為 my_index
創建了一個別名 my_index_alias
。
5.2 使用別名查詢
GET /my_index_alias/_search
{"query": {"match_all": {}}
}
這個查詢將通過別名 my_index_alias
查詢 my_index
中的所有文檔。
5.3 更新索引別名
可以動態更新別名,例如將別名指向另一個索引:
POST /_aliases
{"actions": [{"remove": {"index": "my_index","alias": "my_index_alias"},"add": {"index": "new_index","alias": "my_index_alias"}}]
}
這個命令將 my_index_alias
從 my_index
移除,并指向 new_index
。
六、分片和副本管理
6.1 分片
分片是 Elasticsearch 用于水平擴展和分布式存儲的基本單位。每個索引可以分為多個主分片(Primary Shard),每個主分片可以有多個副本分片(Replica Shard)。分片的數量在索引創建時設置,并且一旦設置就不能更改,但副本數量可以動態調整。
分片的優點包括:
- 擴展性:可以將數據分布到多個節點上,提高存儲和處理能力。
- 高可用性:通過副本分片提供容錯能力,當主分片失效時,副本分片可以提升為主分片。
6.2 副本
副本分片是主分片的完整拷貝,用于提供高可用性和讀取性能。當一個節點失效時,副本分片可以確保數據不會丟失并繼續提供服務。
七、索引性能優化
7.1 分片數量的選擇
在創建索引時,選擇適當的分片數量是優化索引性能的關鍵。過多的分片會導致資源浪費,過少的分片會導致性能瓶頸。可以根據數據量和節點數量來合理設置分片數量。
7.2 動態調整副本
在讀多寫少的場景中,可以增加副本數量以提高讀取性能。在寫多讀少的場景中,可以減少副本數量以提高寫入性能和減少開銷。
7.3 索引刷新間隔
默認情況下,Elasticsearch 每秒會刷新一次索引,將新數據寫入磁盤。在批量寫入數據時,可以適當增加刷新間隔以提高寫入性能,減少 I/O 開銷。
PUT /my_index/_settings
{"index": {"refresh_interval": "30s"}
}
八、索引模板的高級應用
動態模板
動態模板允許根據字段名稱或數據類型自動應用特定的映射規則,適用于需要靈活處理不同字段的情況。
PUT /_template/dynamic_template_example
{"index_patterns": ["dynamic_*"],"mappings": {"dynamic_templates": [{"strings_as_keywords": {"match_mapping_type": "string","mapping": {"type": "keyword"}}}]}
}
這個動態模板會將所有以 dynamic_
開頭的索引中的字符串字段映射為 keyword
類型。
九、索引管理工具
9.1 Kibana
Kibana 是 Elasticsearch 的數據可視化和管理工具,提供了直觀的界面來管理和查詢 Elasticsearch 索引。可以通過 Kibana 查看索引狀態、執行查詢和分析數據。
9.2 Curator
Curator 是 Elasticsearch 的索引管理工具,提供了一組命令行工具來管理索引生命周期。可以使用 Curator 定期刪除舊索引、優化索引和管理快照。