共计 12312 个字符,预计需要花费 31 分钟才能阅读完成。
Elasticsearch 是一个高伸缩的开源全文搜索和分析引擎。它可以快速地、近实时的存储,搜索和分析大规模的数据。一般被用作底层引擎 / 技术,为具有复杂搜索功能和要求的应用提供强有力的支撑。
Elasticsearch 能够被用在这些地方:
- 假设有一个在线的商店网站,为了让客户搜索到销售的产品。在这种情况下,可以使用 Elasticsearch 来存储你的整个产品目录和库存,并提供搜索以及自动给他们一些建议。
- 假设想要收集日志或者交易数据,通过分析、挖掘来寻找趋势,统计,总结或异常。在这种情况下,可以使用 LogStash(Elasticsearch/Logstash/Kibana栈的一部分)去收集、汇总并解析你的数据,然后通过 LogStash 把这些数据递交给 Elasticsearch 。一旦 Elasticsearch 取得了数据,你就可以进行搜索并且聚合你感兴趣的信息。
- 假设运行一个价格提醒平台,让价格精明的客户指定一个规则,如“我有兴趣购买一个特定的电子小配件,如果下个月内,有卖家的价格低于 $x,我想得到通知”。在这种情况下,你可以把卖家的价格递交到 Elasticsearch ,使用反向搜索(过滤器),将价格变动与客户查询进行匹配,一旦发现匹配结果,则通知客户。
- 假设有分析(商业智能)需求,希望快速调查,分析,可视化和在大量(考虑百万或十亿条记录)的数据中查找一个特设的问题。在这种情况下,你可以使用 Elasticsearch 储存数据,然后使用 Kibana(Elasticsearch 栈的一部分)构建自定义仪表板,以便可视化对你重要的数据。另外,你可以使用 Elasticsearch 聚合功能,依靠数据执行复杂的商业智能查询。
对于本教程的其余部分,会通过 Elasticsearch 的启动和运行过程指导你初步认识它,并展示一些基本的操作,比如:索引,搜索和修改数据。本教程的结束后,你将会对 Elasticsearch 是什么以及它的工作原理有了较深的认识。希望你能受到启发,既能使用它建立复杂的搜索应用程序又能从你的数据中发掘有用的东西。
官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html
Elasticsearch 版本:5.4
基本概念(Basic Concepts)
有一些概念是 Elasticsearch 的核心 。 从一开始就理解这些概念将大大有助于以后的学习。
近实时(NRT)
Elasticsearch 是一个接近实时的搜索平台。这意味着从将文档索引的时间到变得可搜索的时间只有轻微的延迟(通常为 1 秒)。
集群(Cluster)
集群是一个或多个节点(服务器)的集合,它们联合起来保存所有的数据,并且可以在所有的节点上进行索引和搜索操作。集群由唯一的名称标识,默认是 ”elasticsearch”。由于一个节点仅仅可以属于一个集群,并根据集群名称加入集群。所以该名字很重要。
不要在不同的环境中使用一样的集群名字,否则可能会导致加入错误的集群。例如,你可以分别在开发,过渡,生产环境中使用集群名称, logging-dev,logging-stage 和 logging-prod 。
注意,只有一个节点的集群是有效和完美的。也可以拥有多个独立的集群,每个集群都有自己独特的集群名称。
节点(Node)
节点是一个单一的服务器,是集群的一部分,存储数据,并参与集群的索引和搜索。和集群一样,节点也是通过唯一的名字去区分,默认名字是一个随机的 UUID(Universally Unique IDentifier),当服务器启动的时候就会设置到该节点。如果不想使用默认值,你也可以自定义节点的名称。名称对管理员来说十分重要,它可以帮助你区分出集群中的各个服务器和哪些节点相对应。
节点通过配置集群的名称,就可以加入到指定的集群。默认情况下,节点都加入一个叫 elasticsearch 的集群,这意味着如果你在网络中启动了大量的节点并且假如他们都能互相通讯的话,那么他们将会被自动的加入一个名字叫 elasticsearch 的集群。
索引(Index)
索引 是具有某种相似特征的文档的集合。例如,客户数据索引,产品目录索引,以及订单数据索引。索引由名称(必须全部为小写)标识,此名称用于在对文档进行索引、搜索、更新和删除操作时使用。在单个集群中,您可以根据需要定义任意数量的索引。
类型(Type)
一个索引可以定义一个或多个类型。类型是索引的逻辑类别 / 分区,你怎么理解都行。通常,为具有一组公共字段的文档定义一种类型。例如,一个博客平台,假如将所有数据存储在单个索引中。在此索引中,可以定义用户数据类型,博客数据类型以及评论数据类型。
文档(document)
文档是可以被索引的基本单位。例如,用一个文档保存某个客户的数据,或者保存单个产品的数据,或者保存单个订单的数据。文档使用 JSON 表示。在索引 / 类型中可以存储大量文档。值得注意的是,尽管文档本质上是存放在索引中,但实际上是被索引 / 分配到索引中的一个类型中。
分片和副本(shards & replicas)
一个索引可能存储海量数据,有可能超过单个节点的硬盘容量。例如,某个索引存储了 10 亿个文档,占用 1TB 的硬盘空间,单个节点的硬盘有可能不足以存储那么大的数据量,就算可以存储下,但是可能会降低服务器处理搜索请求的速度。
为了解决这个问题,elasticsearch 提供了分片功能,即将索引细分。创建索引时,可以简单地定义所需的分片数。每个分片本身就具备索引的全部功能,可以存放在集群中的任何一个节点。
分片很重要,主要原因有两个:
- 它允许您水平分割 / 缩放您的内容量
- 它允许你并行地分发操作到多个节点的分片上,从而可以提升性能或吞吐量。
碎片分发的机制,以及它的文档如何汇总回到搜索请求中完全由 Elasticsearch 管理,并且对用户来说是透明的。
在网络 / 云环境中,任何时候都可能发生故障,分片会 非常有用,并强烈建议使用故障转移机制,以防止分片 / 节点脱机或消失。为此,elasticsearch 允许您将索引的分片复制一份或多份,也就是所谓的复制分片,或简写为副本。
副本很重要,主要原因有两个:
- 如果分片 / 节点出现故障,则可提供高可用性。因此,要注意,副本与其复制的原始 / 主分片不能分配在同一节点上。
- 它允许您扩展搜索量 / 吞吐量,因为可以对所有副本并行执行搜索。
总而言之,每个索引可以分为多个分片。每个 索引也可以被复制零次(意味着没有副本)或多次。一旦复制,每个索引将具有主分片(复制的原始分片)和副分片(主分片的副本)。可以在创建索引时根据索引定义碎片和副本的数量。创建索引后,您可以随时动态更改副本数,但不能更改事后的分片数。
默认情况下,每个索引都会被分配 5 个主分片和 1 一个复制分片,这意味着如果你的集群中有两个节点,你的索引将会有 5 个主分片和 5 个复制分片,总共有 10 个分片。
每个 elasticsearch 分片是一个 Lucene index,一个 Lucene 索引中可以有很多的文档,截至 LUCENE-5843 , 最多 2,147,483,519(= Integer.MAX_VALUE - 128) 个文档. 可以使用 _cat/shards api 监视分片大小。
更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2017-06/144694p2.htm
列出所有索引
现在来看看我们的索引
GET /_cat/indices?v
返回内容如下:
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
yellow open .kibana XYZPR5XGQGWj8YlyZ1et_w 1 1 1 0 3.1kb 3.1kb
可以看到在集群中有一个索引
创建索引
现在让我们创建一个名叫 customer 的索引,然后再次列出所有的索引
PUT /customer?pretty
GET /_cat/indices?v
执行第一行返回以下内容,这里我们使用 PUT 谓词创建了一个名叫 customer 的索引,在后面跟上 pretty 表示如果有数据返回的话, 用格式化后的 JSON 返回数据
{"acknowledged": true,
"shards_acknowledged": true
}
执行第二行返回以下内容,结果告诉我们,已经创建了一个名叫 customer 的索引,它有 5 个主分片和 1 个复制分片(默认情况下是 1 个),在这个索引中还没有文档。
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
yellow open .kibana XYZPR5XGQGWj8YlyZ1et_w 1 1 1 0 3.1kb 3.1kb
yellow open customer M8i1ZxhsQJqk7HomOA7c_Q 5 1 0 0 650b 650b
可能你已经注意到 customer 索引的健康值被标记为 yellow,回顾我们前面讨论的内容,yellow 表示该索引的复制分片(副本)还没有被分配。该索引出现这种情况的原因是, Elasticsearch 默认会为该索引创建 1 个副本,由于此时我们只有 1 个节点,那么这副本就没法被分配(为了高可用),直到以后为该集群加入了另一个节点。一旦该副本分配到了另一个节点,该索引的健康状态就会变成 green。
索引和查询文档
接下来我们放一些东西到 customer 索引中。之前提过的,为了索引某个文档,我们必须告诉 Elasticsearch ,该文档应该属于该索引的哪个类型,下面我们索引一个简单的文档到 customer 索引,类型名称为 external ,并且 ID 为 1
PUT /customer/external/1?pretty
{"name": "John Doe"
}
返回内容如下:
{"_index": "customer",
"_type": "external",
"_id": "1",
"_version": 1,
"result": "created",
"_shards": {"total": 2,
"successful": 1,
"failed": 0
},
"created": true
}
从以上可以看出,一个新的客户文档成功被索引到 customer索引的 extenal 类型中,并且我们在索引的时候指定文档的内部 id 值为 1。
值得注意的是,Elasticsearch 不需要在你索引文档到某个索引之前,明确的创建一个索引。比如上一个例子,如果 customer索引不存在,Elasticsearch将自动创建该索引。
再来看下我们刚刚索引的文档
GET /customer/external/1?pretty
返回内容如下:
{"_index": "customer",
"_type": "external",
"_id": "1",
"_version": 1,
"found": true,
"_source": {"name": "John Doe"
}
}
这里比较特殊的是 found 字段,它说明我们查到了一个 id 为 1 的文档,另一特殊的字段_source, 保存了在上一个步骤索引的的文档。
删除索引
现在让我们删除刚刚已经创建的索引,并再次查看所有索引。
DELETE /customer?pretty
GET /_cat/indices?v
第一行返回内容以下:
{"acknowledged": true
}
第二行返回内容如下:
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size
yellow open .kibana XYZPR5XGQGWj8YlyZ1et_w 1 1 1 0 3.1kb 3.1kb
从以上内容可以看到我们的 customer索引已经被删除了。
在继续学习之前,让我们快速回顾一下,本节学的 API 命令
PUT /customer
PUT /customer/external/1
{"name": "John Doe"
}
GET /customer/external/1
DELETE /customer
如果仔细学习了以上命令,应该会发现 elasticsearch 访问数据所使用的模式,概括如下:
<REST Verb> /<Index>/<Type>/<ID>
使用 REST 访问模式,在所有的 API 命令中是十分普遍的,如果你可以简单记住它,对于掌握 Elasticsearch,那么已经开了一个好头。
修改数据
Elasticsearch 具有近实时的操作和查询数据的能力,默认情况下,从你索引,更新或者删除你的数据到用户可以搜索到新的结果这个过程大概需要 1 秒(基于 refresh 频率)。它们和类似 SQL 这样的平台不一样,SQL 的数据在事务完成后就马上就生效,不会有延迟。
索引 / 替换文档
之前已经演示了怎么索引单个文档,再来回顾一下:
PUT /customer/external/1?pretty
{"name": "John Doe"
}
上面的命令将会索引指定文档到 customer 索引的 external 类型,文档的 id 值是 1。如果我们用不同的文档内容(或者相同)再次执行上面的命令,elasticsearch 将会用一个新的文档取代旧的文档(即重建索引)。
PUT /customer/external/1?pretty
{"name": "Jane Doe"
}
上面的操作把 id 为 1 的文档的 name 字段由 ”john doe” 改成 ”jane doe”。另一方面,如果我们使用不同的 id 执行上述命令,将会创建一个新的文档,旧的文档会保持原样。
PUT /customer/external/2?pretty
{"name": "Jane Doe"
}
以上操作索引了一个新的 id 为 2 文档。
索引新文档的时候,id 值是可选的。如果没有指定,elasticsearch 将会为文档生成一个随机的 id。实际生成的 id 将会保存在调用 api 接口的返回结果中。
下面的例子展示不指定文档 id 的时候是如何索引文档的:
POST /customer/external?pretty
{"name": "Jane Doe"
}
返回内容如下:
{"_index": "customer",
"_type": "external",
"_id": "AVyc9L6dtgHksqXKpTlM",
"_version": 1,
"result": "created",
"_shards": {"total": 2,
"successful": 1,
"failed": 0
},
"created": true
}
注意,在上面的例子中,因为没有指定 id,我们需要使用 POST 谓词取代之前的 PUT 谓词。
更新文档
除了可以索引和替换文档之外,我们还可以更新文档。注意,elasticsearch 并没有在原来的文档基础上进行更新,每当进行更新时,Elasticsearch 将删除旧的文档,然后索引新的文档。以下例子演示了如何更新文档,把之前 ID 为 1 的 name 字段改为 ”Jane Doe”:
POST /customer/external/1/_update?pretty
{"doc": {"name": "Jane Doe" }
}
以下例子演示了如何更新先前 ID 为 1 的文档,改变 name 字段为 ”Jane Doe” 的同时添加 age 字段
POST /customer/external/1/_update?pretty
{"doc": {"name": "Jane Doe", "age": 20 }
}
也可以使用简单的脚本来执行更新。以下 示例使用脚本将年龄增加 5:
POST /customer/external/1/_update?pretty
{"script" : "ctx._source.age += 5"
}
在以上例子中,ctx._source 指当前即将被更新的源文档。请注意,在撰写本文时,只能一次更新单个文档。将来,Elasticsearch 可能会提供通过查询条件(如 SQL UPDATE-WHERE
语句)更新多个文档的 功能。
删除文档
删除文档非常简单,以下例子演示了怎么删除 customer 索引下 ID 为 2 的文档,查阅Delete By Query API 删除与特定查询匹配的所有文档。值得注意的是,直接删除整个索引比通过 query api 删除所有文档更高效。
DELETE /customer/external/2?pretty
批处理
除了能够索引,更新和删除单个文档之外,Elasticsearch 也提供了使用 _bulk API 批量执行上述任何操作的功能 。 这个功能是非常重要的,因为它提供了一个非常有效的机制来尽可能快地进行多个操作,并且尽可能减少网络的往返行程。简单举个例子,下面会在一个 bulk 操作中索引两个文档:
POST /customer/external/_bulk?pretty
{"index":{"_id":"1"}}
{"name": "John Doe" }
{"index":{"_id":"2"}}
{"name": "Jane Doe" }
返回内容如下:
{"took": 27,
"errors": false,
"items": [
{"index": {"_index": "customer",
"_type": "external",
"_id": "1",
"_version": 1,
"result": "created",
"_shards": {"total": 2,
"successful": 1,
"failed": 0
},
"created": true,
"status": 201
}
},
{"index": {"_index": "customer",
"_type": "external",
"_id": "2",
"_version": 1,
"result": "created",
"_shards": {"total": 2,
"successful": 1,
"failed": 0
},
"created": true,
"status": 201
}
}
]
}
下面的例子会在一个操作内更新第一个文档同时删除第二个文档:
POST /customer/external/_bulk?pretty
{"update":{"_id":"1"}}
{"doc": {"name": "John Doe becomes Jane Doe" } }
{"delete":{"_id":"2"}}
返回内容如下:
{"took": 25,
"errors": false,
"items": [
{"update": {"_index": "customer",
"_type": "external",
"_id": "1",
"_version": 2,
"result": "updated",
"_shards": {"total": 2,
"successful": 1,
"failed": 0
},
"status": 200
}
},
{"delete": {"found": true,
"_index": "customer",
"_type": "external",
"_id": "2",
"_version": 2,
"result": "deleted",
"_shards": {"total": 2,
"successful": 1,
"failed": 0
},
"status": 200
}
}
]
}
注意以上的删除操作,在它之后并没有相应的源文档,因为只需要文档的 ID 就能删除。
如果某个操作因某些原因执行失败,不会影响后面的操作,它会继续执行剩下的操作。api 返回结果时,每一个操作都会提供状态(和接收到的顺序一致),你可以通过这个状态检查操作是否执行成功。
官方文档
https://www.elastic.co/guide/en/elasticsearch/reference/current/_exploring_your_cluster.html
https://www.elastic.co/guide/en/elasticsearch/reference/current/_modifying_your_data.html
Elasticsearch 教程系列文章:
Linux 上安装部署 ElasticSearch 全程记录 http://www.linuxidc.com/Linux/2015-09/123241.htm
Linux 下 Elasticsearch 1.7.0 安装配置 http://www.linuxidc.com/Linux/2017-05/144215.htm
Elasticsearch 的安装,运行和基本配置 http://www.linuxidc.com/Linux/2016-07/133057.htm
使用 Elasticsearch + Logstash + Kibana 搭建日志集中分析平台实践 http://www.linuxidc.com/Linux/2015-12/126587.htm
Ubuntu 14.04 搭建 ELK 日志分析系统(Elasticsearch+Logstash+Kibana) http://www.linuxidc.com/Linux/2016-06/132618.htm
Elasticsearch1.7 升级到 2.3 实践总结 http://www.linuxidc.com/Linux/2016-11/137282.htm
Ubuntu 14.04 中 Elasticsearch 集群配置 http://www.linuxidc.com/Linux/2017-01/139460.htm
Elasticsearch-5.0.0 移植到 Ubuntu 16.04 http://www.linuxidc.com/Linux/2017-01/139505.htm
ElasticSearch 5.2.2 集群环境的搭建 http://www.linuxidc.com/Linux/2017-04/143136.htm
Linux 下安装搜索引擎 Elasticsearch http://www.linuxidc.com/Linux/2017-05/144105.htm
CentOS 上安装 ElasticSearch 详解 http://www.linuxidc.com/Linux/2017-05/143766.htm
ElasticSearch 的详细介绍:请点这里
ElasticSearch 的下载地址:请点这里
本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-06/144694.htm
Elasticsearch 是一个高伸缩的开源全文搜索和分析引擎。它可以快速地、近实时的存储,搜索和分析大规模的数据。一般被用作底层引擎 / 技术,为具有复杂搜索功能和要求的应用提供强有力的支撑。
Elasticsearch 能够被用在这些地方:
- 假设有一个在线的商店网站,为了让客户搜索到销售的产品。在这种情况下,可以使用 Elasticsearch 来存储你的整个产品目录和库存,并提供搜索以及自动给他们一些建议。
- 假设想要收集日志或者交易数据,通过分析、挖掘来寻找趋势,统计,总结或异常。在这种情况下,可以使用 LogStash(Elasticsearch/Logstash/Kibana栈的一部分)去收集、汇总并解析你的数据,然后通过 LogStash 把这些数据递交给 Elasticsearch 。一旦 Elasticsearch 取得了数据,你就可以进行搜索并且聚合你感兴趣的信息。
- 假设运行一个价格提醒平台,让价格精明的客户指定一个规则,如“我有兴趣购买一个特定的电子小配件,如果下个月内,有卖家的价格低于 $x,我想得到通知”。在这种情况下,你可以把卖家的价格递交到 Elasticsearch ,使用反向搜索(过滤器),将价格变动与客户查询进行匹配,一旦发现匹配结果,则通知客户。
- 假设有分析(商业智能)需求,希望快速调查,分析,可视化和在大量(考虑百万或十亿条记录)的数据中查找一个特设的问题。在这种情况下,你可以使用 Elasticsearch 储存数据,然后使用 Kibana(Elasticsearch 栈的一部分)构建自定义仪表板,以便可视化对你重要的数据。另外,你可以使用 Elasticsearch 聚合功能,依靠数据执行复杂的商业智能查询。
对于本教程的其余部分,会通过 Elasticsearch 的启动和运行过程指导你初步认识它,并展示一些基本的操作,比如:索引,搜索和修改数据。本教程的结束后,你将会对 Elasticsearch 是什么以及它的工作原理有了较深的认识。希望你能受到启发,既能使用它建立复杂的搜索应用程序又能从你的数据中发掘有用的东西。
官方文档:https://www.elastic.co/guide/en/elasticsearch/reference/current/index.html
Elasticsearch 版本:5.4
基本概念(Basic Concepts)
有一些概念是 Elasticsearch 的核心 。 从一开始就理解这些概念将大大有助于以后的学习。
近实时(NRT)
Elasticsearch 是一个接近实时的搜索平台。这意味着从将文档索引的时间到变得可搜索的时间只有轻微的延迟(通常为 1 秒)。
集群(Cluster)
集群是一个或多个节点(服务器)的集合,它们联合起来保存所有的数据,并且可以在所有的节点上进行索引和搜索操作。集群由唯一的名称标识,默认是 ”elasticsearch”。由于一个节点仅仅可以属于一个集群,并根据集群名称加入集群。所以该名字很重要。
不要在不同的环境中使用一样的集群名字,否则可能会导致加入错误的集群。例如,你可以分别在开发,过渡,生产环境中使用集群名称, logging-dev,logging-stage 和 logging-prod 。
注意,只有一个节点的集群是有效和完美的。也可以拥有多个独立的集群,每个集群都有自己独特的集群名称。
节点(Node)
节点是一个单一的服务器,是集群的一部分,存储数据,并参与集群的索引和搜索。和集群一样,节点也是通过唯一的名字去区分,默认名字是一个随机的 UUID(Universally Unique IDentifier),当服务器启动的时候就会设置到该节点。如果不想使用默认值,你也可以自定义节点的名称。名称对管理员来说十分重要,它可以帮助你区分出集群中的各个服务器和哪些节点相对应。
节点通过配置集群的名称,就可以加入到指定的集群。默认情况下,节点都加入一个叫 elasticsearch 的集群,这意味着如果你在网络中启动了大量的节点并且假如他们都能互相通讯的话,那么他们将会被自动的加入一个名字叫 elasticsearch 的集群。
索引(Index)
索引 是具有某种相似特征的文档的集合。例如,客户数据索引,产品目录索引,以及订单数据索引。索引由名称(必须全部为小写)标识,此名称用于在对文档进行索引、搜索、更新和删除操作时使用。在单个集群中,您可以根据需要定义任意数量的索引。
类型(Type)
一个索引可以定义一个或多个类型。类型是索引的逻辑类别 / 分区,你怎么理解都行。通常,为具有一组公共字段的文档定义一种类型。例如,一个博客平台,假如将所有数据存储在单个索引中。在此索引中,可以定义用户数据类型,博客数据类型以及评论数据类型。
文档(document)
文档是可以被索引的基本单位。例如,用一个文档保存某个客户的数据,或者保存单个产品的数据,或者保存单个订单的数据。文档使用 JSON 表示。在索引 / 类型中可以存储大量文档。值得注意的是,尽管文档本质上是存放在索引中,但实际上是被索引 / 分配到索引中的一个类型中。
分片和副本(shards & replicas)
一个索引可能存储海量数据,有可能超过单个节点的硬盘容量。例如,某个索引存储了 10 亿个文档,占用 1TB 的硬盘空间,单个节点的硬盘有可能不足以存储那么大的数据量,就算可以存储下,但是可能会降低服务器处理搜索请求的速度。
为了解决这个问题,elasticsearch 提供了分片功能,即将索引细分。创建索引时,可以简单地定义所需的分片数。每个分片本身就具备索引的全部功能,可以存放在集群中的任何一个节点。
分片很重要,主要原因有两个:
- 它允许您水平分割 / 缩放您的内容量
- 它允许你并行地分发操作到多个节点的分片上,从而可以提升性能或吞吐量。
碎片分发的机制,以及它的文档如何汇总回到搜索请求中完全由 Elasticsearch 管理,并且对用户来说是透明的。
在网络 / 云环境中,任何时候都可能发生故障,分片会 非常有用,并强烈建议使用故障转移机制,以防止分片 / 节点脱机或消失。为此,elasticsearch 允许您将索引的分片复制一份或多份,也就是所谓的复制分片,或简写为副本。
副本很重要,主要原因有两个:
- 如果分片 / 节点出现故障,则可提供高可用性。因此,要注意,副本与其复制的原始 / 主分片不能分配在同一节点上。
- 它允许您扩展搜索量 / 吞吐量,因为可以对所有副本并行执行搜索。
总而言之,每个索引可以分为多个分片。每个 索引也可以被复制零次(意味着没有副本)或多次。一旦复制,每个索引将具有主分片(复制的原始分片)和副分片(主分片的副本)。可以在创建索引时根据索引定义碎片和副本的数量。创建索引后,您可以随时动态更改副本数,但不能更改事后的分片数。
默认情况下,每个索引都会被分配 5 个主分片和 1 一个复制分片,这意味着如果你的集群中有两个节点,你的索引将会有 5 个主分片和 5 个复制分片,总共有 10 个分片。
每个 elasticsearch 分片是一个 Lucene index,一个 Lucene 索引中可以有很多的文档,截至 LUCENE-5843 , 最多 2,147,483,519(= Integer.MAX_VALUE - 128) 个文档. 可以使用 _cat/shards api 监视分片大小。
更多详情见请继续阅读下一页的精彩内容:http://www.linuxidc.com/Linux/2017-06/144694p2.htm