当前位置: 首页 > 知识库问答 >
问题:

如何重命名集群中的索引?

湛光华
2023-03-14

我需要重命名集群中的多个索引(必须更改它们的名称,我不能使用别名)。

我看到没有支持的方法可以做到这一点,我找到的最接近的方法是重命名索引的目录,我在集群中尝试了这个方法。

集群有 3 台机器 ABC,每个机器上都复制了分片。我关闭了A上的弹性搜索,将/var/lib/弹性搜索/安全/节点/0/索引/旧索引名称重命名为/var/lib/弹性搜索/安全性/节点/0/索引/新索引名称,然后重新启动A

集群的状态是黄色的,弹性搜索正在使用一些魔法来恢复正确的状态。过了一段时间,我最终得到了

  • 旧索引名称可用且完全复制(我猜是从BC恢复的)
  • newindexname可用(我可以搜索它),但头部插件显示其分片处于“未分配”状态,并且它们显示为灰色(未复制)

在恢复安全期间.log显示以下消息:

[2015-02-20 11:02:33,461][INFO ][gateway.local.state.meta ] [A.example.com] dangled index directory name is [newindexname], state name is [oldindexname], renaming to directory name

虽然新索引名是可搜索的,但它肯定不是处于正常状态。

我通过删除新索引名回滚到以前的状态。群集将恢复为绿色,没有任何“未分配”条目。

鉴于此,如何在群集中将旧索引名称重命名为新索引名称

注意:我想到的最终解决方案是将< code > ol index 滚动复制到< code>newindex中,然后删除< code > ol index 。这将需要时间,所以如果有一个更直接的解决方案,这将是伟大的。

共有3个答案

亢嘉茂
2023-03-14

要重命名索引,您可以使用Elasticsearch快照模块。

首先,您必须拍摄索引的快照,同时恢复它时,您可以重命名索引。

    POST /_snapshot/my_backup/snapshot_1/_restore
    {
     "indices": "jal",
     "ignore_unavailable": "true",
     "include_global_state": false,
     "rename_pattern": "jal",
     "rename_replacement": "jal1"
     }

rename_replacement:-要在其中备份数据的新索引名。

严朝明
2023-03-14

从ElasticSearch 7.4开始,重命名索引的最佳方法是使用新引入的克隆索引API复制索引,然后使用删除索引API删除原始索引。

克隆索引API相对于用于相同目的的快照API或重新索引API的使用的主要优点是速度,而无需重新处理其任何内容(显然,在支持硬链接的文件系统上;否则,文件将在文件系统级别进行复制,这仍然比其他方法更有效)。克隆索引还保证目标索引在每个点上都与源索引相同(即,与重新索引方法相反,不需要手动复制设置和映射),并且不需要配置本地快照目录。

旁注:尽管这个过程比以前的解决方案快得多,但它仍然意味着停机时间。有一些真实的用例证明重命名索引是合理的(例如,作为拆分、收缩或备份工作流中的一个步骤),但重命名索引不应成为日常操作的一部分。如果您的工作流需要频繁的索引重命名,那么您应该考虑改用索引别名。

以下是将索引< code>source_index重命名为< code>target_index的完整操作序列示例。它可以使用一些特定于ElasticSearch的控制台来执行,比如集成在Kibana中的控制台。这个例子的另一个版本见这个要点,使用< code>curl代替弹性搜索控制台。

# Make sure the source index is actually open
POST /source_index/_open

# Put the source index in read-only mode
PUT /source_index/_settings
{
  "settings": {
    "index.blocks.write": "true"
  }
}

# Clone the source index to the target name, and set the target to read-write mode
POST /source_index/_clone/target_index
{
  "settings": {
    "index.blocks.write": null 
  }
}

# Wait until the target index is green;
# it should usually be fast (assuming your filesystem supports hard links).
GET /_cluster/health/target_index?wait_for_status=green&timeout=30s

# If it appears to be taking too much time for the cluster to get back to green,
# the following requests might help you identify eventual outstanding issues (if any)
GET /_cat/indices/target_index
GET /_cat/recovery/target_index
GET /_cluster/allocation/explain

# Delete the source index
DELETE /source_index
段干祺
2023-03-14

您可以使用REINDEX来实现这一点。

Reindex不会尝试设置目标索引。它不会复制源索引的设置。您应该在运行_reindex操作之前设置目标索引,包括设置映射、分片计数、副本等。

    < li >首先将索引复制到一个新名称中
POST /_reindex
{
  "source": {
    "index": "twitter"
  },
  "dest": {
    "index": "new_twitter"
  }
}
DELETE /twitter
 类似资料:
  • 问题内容: 我需要重命名集群中的几个索引(它们的名称必须更改,我不能使用alias)。 我看到没有支持的方法来执行此操作,我发现最接近的方法是重命名索引的目录,我在集群中尝试了此方法。 该集群有3台计算机,并且分片在每台计算机上复制。我关闭了上elasticsearch ,改名到并重新启动。 群集的状态为黄色,elasticsearch正在做一些魔术来恢复正确的状态。过了一段时间我最终 正在使用和

  • 问题内容: 我想重命名索引。我看过alter table文档,但无法弄清楚简单地重命名索引的语法。通过MySQL GUI进行操作时,它将删除索引并创建一个新索引。在这种情况下,我希望避免仅为了更改索引名称而重建整个索引。 [附加信息] 在alter table文档中指出 可以通过更改表的.frm文件而不接触表内容来立即进行仅修改表元数据而不修改表数据的更改。以下更改是可以通过这种方式进行的快速更改

  • 本文向大家介绍如何在MongoDB中重命名集合?,包括了如何在MongoDB中重命名集合?的使用技巧和注意事项,需要的朋友参考一下 要在MongoDB中重命名集合,可以使用方法。语法如下- 为了理解上述语法,让我们列出数据库样本中的所有集合。查询如下- 以下是输出- 现在,将集合名称“ informationAboutDelete”更改为“ deleteSomeInformation”。查询如下以

  • 问题内容: 我最近一直念叨如何和作品。我的理解很简单(如果有错,请纠正我): 的数据结构,其背和IS :根据索引列(或键)对数据进行物理排序。每个只能有一个。如果在创建表的过程中未指定No ,则服务器将在上自动创建一个。 问题1 :由于数据是根据索引进行物理排序的,因此这里不需要额外的空间。这样对吗?那么,当我删除创建的索引时会发生什么? :在中,树的包含列值和指向数据库中实际行的指针(行定位符)

  • 我正在尝试重命名/删除一个 Mongo 集合,我无意中放了一个 .(点) 在数据库集合名称的末尾,因此集合名称如下所示: 收藏品名称。 我无法找到一种方法来使用包含点号的集合名称来删除或重命名集合,而不会返回错误。 任何建议这是否是可能的。