首页 > 解决方案 > 使用 elasticsearch 进行远程索引时出错

问题描述

我正在尝试从一个 ES 集群移动到另一个集群,以便计划更新。

两者都是相同的版本(6.4)。为了实现这一点,我正在使用这个命令:

curl -XPOST  -H "Content-Type: application/json"  http://new_cluster/_reindex -d@reindex.json

reindex.json 看起来像这样:

{
  "source": {
    "remote": {
      "host": "http://old_cluster:9199"
    },
    "index": "megabase.33.2",
    "query": {
      "match_all": {}
      }
  },
  "dest": {
    "index": "megabase.33.2"
  }
}

我将一个新集群和旧集群列入了白名单,它的工作原理,但我无法完成数据迁移,因为我有这个错误,我不明白这意味着什么:

{
   "took":1762,
   "timed_out":false,
   "total":8263428,
   "updated":5998,
   "created":5001,
   "deleted":0,
   "batches":11,
   "version_conflicts":0,
   "noops":0,
   "retries":{
      "bulk":0,
      "search":0
   },
   "throttled_millis":0,
   "requests_per_second":-1.0,
   "throttled_until_millis":0,
   "failures":[
      {
         "index":"megabase.33.2",
         "type":"persona",
         "id":"noYOA3IBTWbNbLJUqk6T",
         "cause":{
            "type":"mapper_parsing_exception",
            "reason":"failed to parse [adr_inse]",
            "caused_by":{
               "type":"illegal_argument_exception",
               "reason":"For input string: \"2A004\""
            }
         },
         "status":400
      }
   ]
}

原始集群中的记录如下所示:

{
  "took": 993,
  "timed_out": false,
  "_shards": {
    "total": 4,
    "successful": 4,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": 1,
    "max_score": 0,
    "hits": [
      {
        "_index": "megabase.33.2",
        "_type": "persona",
        "_id": "noYOA3IBTWbNbLJUqk6T",
        "_score": 0,
        "_source": {
          "address": "Obfucated",
          "adr_inse": "2A004",
          "age": 10,
          "base": "Obfucated",
          "city": "Obfucated",
          "cp": 20167,
          "email_md5": "Obfucated",
          "fraicheur": "2020-01-12T19:39:04+01:00",
          "group": 1,
          "latlon": "Obfucated",
          "partner": "Obfucated",
          "partnerbase": 2,
          "sex": 2,
          "sms_md5": "Obfucated"
        }
      }
    ]
  }
}

关于我做错了什么的任何线索?

非常感谢

标签: elasticsearch

解决方案


发现,仅使用 reindex 方法时无法很好地创建映射。

所以我放弃了新的索引,使用 elasticdump 重新创建映射:

elasticdump --input=http://oldcluster/megabase.33.2 --output=http://newcluster/megabase.33.2 --type=mapping

然后运行之前的脚本,一切都完美无缺(而且相当快)


推荐阅读