关键概念理解---未完待续

默认情况下,每个主分片都有一个副本,但可以在现有索引上动态更改副本数。 永远不会在与其主分片相同的节点上启动副本分片。

分片分布计算公式: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
posted @ 2019-12-22 09:19  哈喽哈喽111111  阅读(236)  评论(0编辑  收藏  举报