Elasticsearch 是一個基于 Lucene 的搜索引擎,它提供了分布式、高可用、多租戶的能力。Elasticsearch 的核心組件包括節點(Node)、集群(Cluster)、索引(Index)、分片(Shard)、副本(Replica)等。下面我將結合案例代碼解釋和說明這些核心組件。
節點(Node)
節點是 Elasticsearch 集群中的一個服務器,它負責存儲數據和處理客戶端請求。節點可以通過配置文件或啟動參數設置角色,如主節點(Master)、數據節點(Data)、客戶端節點(Client)等。
案例代碼:
// 創建一個節點設置
Settings settings = Settings.builder().put("node.name", "node-1").put("cluster.name", "my-cluster").put("path.data", "/path/to/data").put("path.logs", "/path/to/logs").build();// 創建一個節點
Node node = new Node(settings);
集群(Cluster)
集群是由一個或多個節點組成的,它們共同協作提供數據的存儲和搜索服務。集群通過集群名稱來區分,確保不同集群之間不會發生數據共享。
案例代碼:
// 創建一個集群客戶端
TransportClient client = new PreBuiltTransportClient(Settings.EMPTY).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("host1"), 9300)).addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("host2"), 9300));// 關閉客戶端
client.close();
索引(Index)
索引是具有相似特征的文檔集合。索引可以包含一個或多個類型(Type),每種類型都有自己的字段映射。在 Elasticsearch 7.x 版本中,一個索引只能包含一個類型。
案例代碼:
// 創建一個索引
CreateIndexRequest request = new CreateIndexRequest("my-index");
client.admin().indices().create(request).actionGet();
分片(Shard)
分片是索引數據的子集,它可以將一個大的索引拆分成多個部分,分布在不同的節點上。分片可以是主分片(Primary Shard)或副本分片(Replica Shard)。
案例代碼:
// 創建一個索引,設置分片數量和副本數量
request = new CreateIndexRequest("my-index").settings(Settings.builder().put("number_of_shards", 3).put("number_of_replicas", 2));
client.admin().indices().create(request).actionGet();
副本(Replica)
副本是分片的復制,可以提高數據的可用性和搜索性能。副本可以分布在不同的節點上,當主分片發生故障時,副本可以升級為主分片。
案例代碼:
// 更新索引副本數量
UpdateIndexRequest updateRequest = new UpdateIndexRequest("my-index").settings(Settings.builder().put("number_of_replicas", 1));
client.admin().indices().updateSettings(updateRequest).actionGet();
以上是 Elasticsearch 核心組件的簡要介紹和案例代碼解釋。要深入了解這些組件的原理和實現,建議閱讀 Elasticsearch 官方文檔和源碼。