elasticsearch 如何将elasticsearch数据重新索引到新映射(从平面字段到对象)?,elasticsearch,reindex,elasticsearch,Reindex" /> elasticsearch 如何将elasticsearch数据重新索引到新映射(从平面字段到对象)?,elasticsearch,reindex,elasticsearch,Reindex" />

elasticsearch 如何将elasticsearch数据重新索引到新映射(从平面字段到对象)?

elasticsearch 如何将elasticsearch数据重新索引到新映射(从平面字段到对象)?,elasticsearch,reindex,elasticsearch,Reindex,我有一个旧索引(elasticsearch索引)有超过20K个对象,这个索引有字段 { "title": "Test title", "title_ar": "عنوان تجريبي", "body": "<p>......</p>" } { “标题”:“测试标题”, “头衔”:“头衔”, “正文”:“…”” } 我想重新建立它们的索引,将所有数据转换成新的映射,如下所示 { "title_1": { "en": "T

我有一个旧索引(elasticsearch索引)有超过20K个对象,这个索引有字段

{
    "title": "Test title",
    "title_ar": "عنوان تجريبي",
    "body": "<p>......</p>"
}
{
“标题”:“测试标题”,
“头衔”:“头衔”,
“正文”:“…”

” }
我想重新建立它们的索引,将所有数据转换成新的映射,如下所示

{
    "title_1": {
        "en": "Test title",
        "ar": "عنوان تجريبي"
    },
    "body": "<p>......</p>"
}
{
“标题1”:{
“en”:“测试标题”,
“ar”:“ar”
},
“正文”:“…”

” }

要在_reindexAPI中实现此转换,最好的elasticsearch管道处理器是什么?

我建议只需使用:

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"
  }
}
如果您的
旧索引中有以下内容:

{
    "title": "Test title",
    "title_ar": "عنوان تجريبي",
    "body": "<p>......</p>"
}
{
    "title": {
        "en": "Test title",
        "ar": "عنوان تجريبي"
    },
    "body": "<p>......</p>"
}
{
“标题”:“测试标题”,
“头衔”:“头衔”,
“正文”:“…”

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

{
    "title": "Test title",
    "title_ar": "عنوان تجريبي",
    "body": "<p>......</p>"
}
{
    "title": {
        "en": "Test title",
        "ar": "عنوان تجريبي"
    },
    "body": "<p>......</p>"
}
{
“标题”:{
“en”:“测试标题”,
“ar”:“ar”
},
“正文”:“…”

” }
如果不重新创建索引,您将无法执行此操作,因为
标题
字段已作为
文本
存在,并且您无法将其更改为
对象
我使用新映射创建了一个新索引,如果不可能,我可以将其命名为
标题_1
。最重要的是将其转换为object,如果您创建了一个新的索引,那么它肯定是可能的,而且很容易实现do@Val我该怎么做?请看下面的答案,我会得到以下错误“script\u stack”:[“ctx.\u source.title=['en':ctx.\u source.title,'ar':ctx.\u source.title\u ar]”,“^----HERE”],`在
ctx.\u source.title
中没有
.title
字段,但它是一个必填字段不确定我是否理解您的第二条注释我得到
脚本异常[运行时错误];嵌套:NullPointerException;
在以下语句
title_1
“source”:“ctx.\u source.title_1=…
您不需要创建
title_1
字段,因为您正在创建一个新索引,您可以保留
title