【发布时间】:2015-05-14 04:52:11
【问题描述】:
如果我必须对该索引进行重新索引处理,我想阻止该索引的写入操作。
这两个帖子(elasticsearch migrations with c and nest 和NEST Elasticsearch Reindex examples)都非常有帮助,但正如this third one 所建议的,您可能会在此过程中丢失更新和删除。
我曾尝试使用 elasticsearch 中的设置阻止索引写入操作,但我在尝试此操作时发现了一些问题。
我使用 Nest 的UpdateSettings api 更改设置blocks.read_only、blocks.metadata、blocks.read 和blocks.write:
var client = CreateElasticClient(); // A wrapper method of ElasticClient()
var response = client.UpdateSettings(r => r
.Index(IndexName)
.BlockReadonly()
.BlocksMetadata()
.BlocksRead()
.BlocksWrite()
);
如果我将设置blocks.read_only、blocks.metadata、blocks.read 设置为 true(默认设置的值),那么索引将不接受写入操作,而且读取操作也不允许,准确地说,我今天不得不重新安装elasticsearch 3次,因为更改这些设置后我无法用它做任何其他事情。
将blocks.write设置为true不会有任何效果,我可以读取索引,也可以编写它。
QUESTION
所以,我的问题是,我应该怎么做(在重新索引时阻止索引写入操作)?
【问题讨论】:
-
只需将此 UpdateSettingsDescriptor 与 .BlocksWrite() 一起保留。为我工作。当您仅使用 .BlockWrite() 时,可能会收到错误响应。想分享吗?
-
嗨@Rob 我在UpdateSettingDescriptor 中使用了两种组合,最后一种只使用了BlocksWrite(),但即便如此我也能够在索引中写入。
-
您确定 UpdateSettings 请求没有返回错误吗?我能够通过在 UpdateSettings 请求上调用 .BlockWrite() 来阻止对索引的写入,它就像一个魅力。能否分享更多细节:ES、NEST 版本、如何创建 ElasticClient 等?
-
@Rob 我使用的是 ES 1.5.1,也是 Nest 的最后一个版本。 UpdateSetting 响应成功。即使我检查索引设置,block.write 也设置为 true。所以我就不贴更多细节了,因为一切都是手工制作的,修改设置是成功的。
标签: elasticsearch nest