默认情况下,每个主分片都有一个副本,但可以在现有索引上动态更改副本数。 永远不会在与其主分片相同的节点上启动副本分片。
分片分布计算公式: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
原文地址:https://www.cnblogs.com/sanduzxcvbnm/p/12079049.html