Elasticsearch reindex因_version错误而失败

时间:2018-01-31 11:44:18

标签: elasticsearch reindex

我正在使用Elasticsearch 5.5版。

我的索引A带有映射:

{
  "myobj": {
    "enabled": false
}

我用映射创建了索引B:

{
  "myobj": {
    "_all": {"enabled": false},
    "properties": {
      "mykey": {"type": "keyword"}
    }
  }
}

当我用身体调用reindex api时:

{
  "source": {
    "index": "a"
  },
  "dest": {
    "index": "b"
  }
}

我收到错误:Cannot generate dynamic mappings of type [_version] for [_version]

以下是我尝试过的reindex请求正文:

{
  "source": {
    "index": "a"
  },
  "dest": {
    "index": "b",
    "version_type": "internal"
  }
}

==> Cannot generate dynamic mappings of type [_version] for [_version]

{
  "source": {
    "index": "a"
  },
  "dest": {
    "index": "b",
    "version_type": "external"
  }
}

==> Cannot generate dynamic mappings of type [_version] for [_version]

{
  "source": {
    "index": "a"
  },
  "dest": {
    "index": "b"
  },
    "script": {
      "inline": "ctx._version = ctx._source.remove(\"_version\")"
    }
}

==> [myobj][1]: version conflict, current version [-1] is different than the one provided [1507030478]

我做错了什么以及如何重新索引这些文件?

修改

我已经尝试添加"conflicts": "proceed",这只是导致没有文档被重新编制索引。

我还在索引B的设置中添加了"index.mapper.dynamic": false,结果没有可观察到的变化。

1 个答案:

答案 0 :(得分:0)

在 ES 中有一些“保留”字段不能直接重新索引,例如 _version_index_type。 (以及已弃用的 reindex

尝试在您的 { 'source': { ... }, 'dest': { ... }, "script": { 'inline': 'ctx._source.remove("_id");ctx._source.remove("_version");' } } 中删除这些保留字段。

main.add(new HelperClass(R.drawable.image, "item1", "item2", "item3"));
main.add(new HelperClass(R.drawable.image2, "item1", "item2", "item3"));