基本概念
Elasticsearch有一些核心的概念, 了解这些概念会让你接下来的学习过程非常轻松.
近乎实时 (NRT)
Elasticsearch是一个近乎实时的搜索平台, 这意味着, 从你索引一个文档到它可被查询会有一个轻微的延迟(通常是一秒钟).
集群
集群是一个或多个节点(服务器)的集合, 一起保存你的所有数据, 并且跨节点提供联合索引和查询的能力. 一个集群通过一个唯一的name来识别, 默认是elasticsearch,. 这个名字很重要, 因为如果一个节点只能通过集群的名字来加入这个集群.
请确保你没有在不同的环境使用相同的集群名称, 否则你可能会连接到错误的集群. 例如, 你可以使用 logging-dev, logging-stage, logging-prod来代表开发, 演示和生产环境.
请注意, 只有一个节点的集群完全合法并且很好, 此外, 你完全可以拥有很多有自己唯一名字的独立集群
节点
一个节点就是一个单独的服务器, 是集群的一部分. 存储数据, 参与集群的索引和搜索功能, 就像集群一样, 一个节点也是由一个名字来识别, 默认在节点启动的时候会随机分配一个UUID, 如果你不喜欢默认的, 你完全可以自定义节点名. 节点名对于管理目的非常重要, 您想要确定您的网络中的哪些服务器对应于您的弹性搜索集群中的哪些节点.
一个节点可以通过集群名称加入一个指定的集群, 默认情况下, 每一个节点启动的时候都会加入一个名叫elasticsearch的集群, 这意味着, 如果你启动了一些数量的节点在你的网络上, 假设他们可以互相发现, 他们都会自动的形成并加入到一个名为elasticsearch的集群.
在一个集群中, 你可以拥有任意数量的节点, 此外, 如果你的网络中没有运行任何Elasticsearch节点, 启动一个新的节点的话, 默认会自动形成一个名为elasticsearch的单节点集群.
索引
一个索引就是具有相似特征的文档的集合. 例如, 你可以为用户数据建立索引, 为产品目录建立索引, 还可以为订单数据建立索引. 一个索引通过名称来标识(必须全为小写字母), 并且在执行索引, 查询, 更新. 删除操作时, 这个名称用于引用索引.
在一个集群里, 你可以定义任意数量的索引.
类型 6.0.0废弃
A type used to be a logical category/partition of your index to allow you to store different types of documents in the same index, eg one type for users, another type for blog posts. It is no longer possible to create multiple types in an index, and the whole concept of types will be removed in a later version. See Removal of mapping types for more.
文档
文档是可以被索引的基本信息单元, 例如, 一个客户可以有一个文档, 一个产品可以有另一个文档, 一个订单一个文档. 文档是一个JSON, 一种普遍用于网络传输的格式.
在一个索引/类型里, 你可以存储任意数量的文档, 请注意, 尽管文档物理存储在一个索引里, 实际上文档必须被索引/分配到一个索引内的类型.
分片和复制
一个索引可能存储超过单个节点硬盘的大量数据. 例如, 一个索引存储10亿个文档, 占据1TB的磁盘空间, 可能不适合单节点的磁盘, 也可能通过一个节点处理查询请求太慢了.
为了解决这一的问题, Elasticsearch提供了细分索引到多个称之为分片的能力. 当你创建索引的时候, 你可以简单的定义你想要的分片的数量, 每个碎片本身都是一个功能完备的独立“索引”, 可以托管在集群中的任何节点上.
分片的重要性因为2个主要原因
- 它可以让你水平的分割/扩展容量
- 它可以让你跨分片(可能在多个节点上)分发和并行操作, 以提高性能和吞吐量
分片是如何分布的和文档是如被聚合回搜索请求的的机制完全由Elasticsearch管理并且对用户透明.
在网络/云环境中,任何时刻都可以预料失败, 它非常有用, 并且强烈建议有一个故障转移机制, 以防一个分片/节点因为任何原因下线或者消失.
复制的重要性因为2个主要原因
- 它提供了高可用性, 以防分片/节点失效. 因为这个原因, 特别要注意, 复制分片从来不会分配到与它所复制的原始/主要相同节点上
- 它让你扩展你的搜索量/吞吐量, 因为搜索可以并行的多个副本上执行
简而言之, 每个索引都可以被分割到多个分片中去. 一个索引页可以被复制0(即没有复制)到多次. 一旦被复制, 每个索引都会有主分片(原始分片)和复制分片(主分片的副本). 在创建索引时, 每个索引可以定义分片和复制的数量. 当索引创建完毕后, 你可以随时更改复制的数量, 但是不能事后更改分片的数量.
默认情况下, Elasticsearch中每个索引分配5个主分片和一个复制, 这意味着, 如果在你的集群里有2个节点, 你的索引会有5个主分片, 和另外5个复制分片(1个完整的复制), 每个索引会有10个分片.
每个Elasticsearch分片是一个Lucene索引, 在一个Lucene索引中你可以拥有的最大文档数量, LUCENE-5843, 限制是2,147,483,519 (= Integer.MAXVALUE - 128) , 你可以通过 _cat/shards API 来监控分片的大小