Elasticsearch 实现数据分片和分布式搜索主要通过以下两个概念来实现:
数据分片(sharding):将一份索引分成多个分片(shard),每个分片可以独立存储和查询数据。这样可以将数据分散到不同的节点上,提高系统的扩展性和容错性。在 Elasticsearch 中,默认情况下一个索引会被分成 5 个主分片,所有主分片的副本数为 1。
分布式搜索(distributed search):在 Elasticsearch 集群中,当执行搜索请求时,搜索请求会被发送到每个节点上执行。每个节点会从自己所拥有的分片中查找符合搜索条件的数据,并将结果返回给协调节点(coordinating node)进行汇总和排序。这样可以利用集群中所有节点的计算资源,提高搜索请求的响应速度。
至于具体如何设置分片数量以及如何进行分布式搜索,可以通过 Elasticsearch 的 API 进行操作。例如,创建索引时可以使用 PUT /index_name
请求来设置分片数量,例如:PUT /my_index?&pretty {"settings" : {"index" : {"number_of_shards" : 5, "number_of_replicas" : 1}}}
而进行搜索时,可以直接向任意一个节点发送请求,例如:GET /my_index/_search?q=user:binjie
,该请求会被协调节点转发到每个节点上执行并进行结果汇总排序后返回给客户端。