# First of all: enable blocks write to enable clonage
PUT /my_index/_settings
{
"settings": {
"index.blocks.write": true
}
}
# clone index into a temporary index
POST /my_index/_clone/my_index-000001
# Disable blocks write
PUT /my_index/_settings
{
"settings": {
"index.blocks.write": false
}
}
# Copy back all documents in the original index to force their reindexetion
POST /_reindex?wait_for_completion=false
{
"source": {
"index": "my_index-000001"
},
"dest": {
"index": "my_index"
}
}
# Copy the task id from the previous result and check the progression:
GET /_tasks/K1IOaNo8R26gRwc55yXJLQ:1165945865
# Finaly delete the temporary index
DELETE my_index-000001
4条答案
按热度按时间dkqlctbz1#
如果要添加一个新字段,而该字段以前从未存在于您的索引中,则无需重新建立索引,只需使用PUTMapAPI http://nocf-www.elastic.co/guide/en/elasticsearch/reference/current/indices-put-mapping.html添加新字段即可
在使用新字段更新Map之前创建的文档将不包含此新字段,因此搜索或聚合将不考虑此字段,它将作为缺失字段工作。
如果需要在使用新字段类型的默认值搜索旧文档时考虑此新字段,则需要重新编制索引。例如,如果新字段的类型为integer,并且您明确需要将此字段包含在旧文档中且值为零(默认值)因为您要计算有多少文档具有此新字段= 0,所以您需要重新索引,但大多数用例我们可以将缺少的字段视为默认值,因此无需重新索引。
在ElastiSearch中没有办法(ES)在Map中添加一个新字段,旧索引将自动更新,即使由于ES存储数据的特性而使用新索引的默认值也是如此。ES使用不可变段来存储索引,因此当您更新文档时,ES不会物理更新已更改的字段,但它会创建一个使用新数据更新的旧文档的新副本,并将旧文档标记为已删除,因此,即使在更新文档中的简单字段时,也会获得文档的新版本,而旧文档标记为已删除
gcmastyq2#
您需要执行这些命令。用索引的名称替换my_index。
用途:
注意事项:此方法假定没有任何内容在索引中插入新数据。在重新索引过程中,新数据将被覆盖。
zsohkypk3#
另一个选择是在Elasticsearch中创建一个代码将引用的索引别名。如果需要更改Map,可以执行以下操作,这样几乎不需要停机。
qgzx9mmu4#
必须使用reindex api:首先必须创建新索引,然后可以使用reidexapi将数据从源索引传输到新索引中。