如何从特定分片中删除数据

时间:2017-03-21 07:23:14

标签: elasticsearch

我有一个包含5个主分片且没有副本的索引。

我的一个碎片(碎片1 )处于未分配状态。当我检查日志文件时,我发现以下错误:

  

2obv65.nvd,_2vfjgt.fdx,_3e3109.si,_3dwgm5_Lucene45_0.dvm,_3aks2g_Lucene45_0.dvd,_3d9u9f_76.del,_3e30gm.cfs,_3cvkyl_es090_0.tim,_3e309p.nvd,_3cvkyl_es090_0.blm]];嵌套:FileNotFoundException [_101a65.si]; ]

当我检查索引时,我找不到碎片1 101a65.si 文件。

我无法找到丢失的.si文件。我尝试了很多,但无法再次分配碎片1

还有其他方法可以再次分配分片1 吗?或者我是否需要删除整个分片1 数据?

请建议。

1 个答案:

答案 0 :(得分:0)

通常在堆栈跟踪中,您应该看到损坏的分片的路径,例如MMapIndexInput(path="path/to/es/db/nodes/node_number/indices/name_of_index/1/index/some_file)(此处 1 是分片编号)

通常删除path/to/es/db/nodes/node_number/indices/name_of_index/1应该有助于分片恢复。如果您仍然看到它未分配,请尝试将此命令发送到您的群集(通常按照the documentation,它应该可以工作,但我不确定ES 1.x语法和命令):

POST _cluster/reroute
{
  "commands" : [ 
        {
          "allocate" : {
              "index" : "myIndexName", 
              "shard" : 1, 
              "node" : "myNodeName", 
              "allow_primary": true
          }
        }
    ]
}