如何_reindex elasticsearch数据到新的映射(从平面字段到对象)?

时间:2019-06-26 14:13:41

标签: elasticsearch reindex

我有一个旧索引(elasticsearch索引)有超过2万个对象,该索引包含字段

{
    "title": "Test title",
    "title_ar": "عنوان تجريبي",
    "body": "<p>......</p>"
}

我想_reindex他们以将所有数据转换为这样的新映射

{
    "title_1": {
        "en": "Test title",
        "ar": "عنوان تجريبي"
    },
    "body": "<p>......</p>"
}

在_reindex API中提供这种转换的最佳Elasticsearch流水线处理器是什么?

1 个答案:

答案 0 :(得分:2)

我建议只使用reindex API来做到这一点:

POST _reindex
{
  "source": {
    "index": "old_index"
  },
  "dest": {
    "index": "new_index"
  },
  "script": {
    "source": "ctx._source.title = [ 'en' : ctx._source.title, 'ar': ctx._source.title_ar]",
    "lang": "painless"
  }
}

如果在您的old_index索引中,您有以下内容:

{
    "title": "Test title",
    "title_ar": "عنوان تجريبي",
    "body": "<p>......</p>"
}

在新索引中,您将拥有以下内容:

{
    "title": {
        "en": "Test title",
        "ar": "عنوان تجريبي"
    },
    "body": "<p>......</p>"
}