默认情况下, 每个主分片都有一个副本, 但可以在现有索引上动态更改副本数. 永远不会在与其主分片相同的节点上启动副本分片.
分片分布计算公式: shard_num = hash(_routing) % num_primary_shards
_routing 是文档的_id
写入到 Elasticsearch 的文档, 在默认的情况下并不马上可以进行搜索. 这是因为在 Elasticsearch 的设计中, 有一个叫做 refresh 的操作. 它可以帮在 Lucene 里的离散的 Segments 进行合并, 并使新进入的文档变为搜索可见. 通常会有一个 refreshtimer 来定时完成这个操作. 这个周期为 1 秒. 这也是我们通常所说的 Elasticsearch 可以实现秒级的搜索. 当然这个 timer 的周期也可以在索引的设置中进行配置. 如果我们想让我们的结果马上可以对搜索可见, 我们可以用如下的方法:
- PUT Twitter/_doc/1?refresh=true
- {
- "user": "GB",
- "uid": 1,
- "city": "Beijing",
- "province": "Beijing",
- "country": "China"
- }
上面的方式可以强制使 Elasticsearch 进行 refresh 的操作, 当然这个是有代价的. 频繁的进行这种操作, 可以使我们的 Elasticsearch 变得非常慢. 另外一种方式是通过设置 refresh=wait_for. 这样相当于一个同步的操作, 它等待下一个 refresh 周期发生完后, 才返回. 这样可以确保我们在调用上面的接口后, 马上可以搜索到我们刚才录入的文档:
- PUT Twitter/_doc/1?refresh=wait_for
- {
- "user": "GB",
- "uid": 1,
- "city": "Beijing",
- "province": "Beijing",
- "country": "China"
- }
开启 / 关闭索引
Elasticsearch 支持索引的在线 / 离线模式. 使用脱机模式时, 在群集上几乎没有任何开销地维护数据. 关闭索引后, 将阻止读 / 写操作. 当您希望索引重新联机时, 只需打开它即可. 但是, 关闭索引会占用大量磁盘空间. 您可以通过将 cluster.indices.close.enable 的默认值从 true 更改为 false 来禁用关闭索引功能, 以避免发生意外.
- # 关闭索引
- PUT Twitter/_close
- # 关闭索引后再查询这个索引的话会报错: index_closed_exception
- # 开启索引
- PUT Twitter/_open
来源: http://www.bubuko.com/infodetail-3344028.html