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