参考书籍:《Elasticsearch技术解析与实战》
分片一旦建立,则分片的数量(创建索引时定义)不能修改;但副本分片的数据可以动态修改(通过rest api修改)。一个索引可以存储很大的数据,可以超过一台机器的存储限制,因为一个索引可以分为多个分片分布在多个机器上。存储一个文档时,具体存储在哪个分片上,是由散列值来决定的。默认情况下,散列值是由文档的ID生成的,文档的ID可以在存储时自己指定,也可以自动生成。Lucene对倒排索引的实现是通过将下图中的三列分别作为词典文件、频率文件、位置文件进行保存的。
当主分片失败时,可以从副本分片中选择一个作为主分片。主分片和副本分片都可以处理查询请求,但只有主分片可以处理索引请求。默认情况下每个索引有5个主分片和1个副本,副本指的是每个主分片对应的副本数,所以加起来就是10个分片,即至少需要两个节点。每一个分片是一个Lucene索引,每个Lucene索引有最大文档存储限制。映射类似于把数据库中的表结构,每一个索引都有一个映射,该映射定义了索引中每个字段的类型。映射可以事先定义,也可以不定义,直接在存储第一条文档时自动识别类型。在滚动升级期间,主分片被分配到一个更高版本节点,不会有副本被分配到一个较低版本的节点,因为旧版本可能不能识别新版本的数据结构。当你在任何请求中添加了参数?pretty=true时,请求的返回值是经过格式化后的JSON数据。使用脚本的三种方式:
- 直接在请求体中使用脚本。把脚本存储在索引中,通过引用脚本id来使用。把脚本存储在本地磁盘中,通过引用脚本名称进行使用。



