数据组织:
1、逻辑设计:索引、类型、文档
索引名+类型名+文档ID,唯一确定一篇文档。
可以搜索特定的类型、索引,也可以跨类型、索引搜索。
文档:索引和搜索的最小单位,类似于关系型数据库中的行。
类型:又称映射类型,包含索引的所有文档的所有字段
索引:类型于关系数据库中的DB
2、物理设计:节点、分片
节点:一个运行的Elasticsearch进程称为一个节点。集群中有多个还是一个节点,对应用程序是透明的,可以连接任意一个节点获取完整的数据集。
分片:一个分片是一个目录中的文件,Lucene用这些文件存储索引数据,也是数据从一个节点迁移到另一个节点的最小单位。一个分片是一份Lucene索引:一个包含倒排索引的文件目录。
副本分片可以运行时进行添加或删除,主分片必须在创建索引之前就决定。
过少的主分片影响扩展,过多的主分片影响性能,默认为5个分片。
索引文档时,根据文档ID散列结果决定分布到哪一个主分片上,被请求的节点将请求转发到对应的目标节点,主分片索引完成后,再在副本分片上索引,所有的索引完成后,返回成功。
搜索时,接受的搜索的节点将请求转发到包含所有数据的分片,通过round-robin轮循机制选择可用的主分片或副本分片,从这些分片中获取结果,并将结果合并到一起返回。