弹性版本为6.3
这是脚本,然后尝试... 创建了一个“演示”索引
PUT demo
{
"mappings": {
"doc":{
"properties": {
"field1":{
"type": "long"
},
"field2":{
"type": "text"
}
}
}
}
}
现在插入了两个文档
PUT demo/doc/12_1
{
"field1":12,
"field2":"text1"
}
PUT demo/doc/13_1
{
"field1":13,
"field2":"text2"
}
现在又创建了一个索引演示程序,具有与上面相同的映射
PUT demo1
{
"mappings": {
"doc":{
"properties": {
"field1":{
"type": "long"
},
"field2":{
"type": "text"
}
}
}
}
}
现在我只想将“ field2”数据复制到“ demo1”中,但我的新索引的“ _id”将与“ demo”的“ field1”相同,因此我按照以下脚本运行。
POST _reindex
{
"source": {
"index": "demo",
"_source":"field2"
},
"dest": {
"index": "demo1"
},
"script": {
"source": "ctx._id = ctx._source['field1']"
}
}
但输出是
"hits": {
"total": 2,
"max_score": 1,
"hits": [
{
"_index": "demo1",
"_type": "doc",
"_id": "G9G_6GgB47Hb5C908ES1",
"_score": 1,
"_source": {
"field2": "text2"
}
},
{
"_index": "demo1",
"_type": "doc",
"_id": "GtG_6GgB47Hb5C908ES1",
"_score": 1,
"_source": {
"field2": "text1"
}
}
]
}
此处“ _id”是随机生成的。 如果我删除“ _source”:“ field2”,则正确生成了“ _id”。
请提出一些可以实现正确行为的建议。
再见,谢谢。
答案 0 :(得分:2)
将field1
添加到源索引块中的_source
,然后在将其值用作_id
作为目标之后,通过脚本将其删除。
在下面使用:
{
"source": {
"index": "demo",
"_source": ["field2", "field1"]
},
"dest": {
"index": "demo1"
},
"script": {
"source": "ctx._id = ctx._source['field1']; ctx._source.remove('field1');"
}
}
您也可以完全忽略源代码块中的_source
。下面将把demo
索引以外的所有字段复制到demo1
除field1
之外的所有字段。
{
"source": {
"index": "demo"
},
"dest": {
"index": "demo1"
},
"script": {
"source": "ctx._id = ctx._source['field1']; ctx._source.remove('field1');"
}
}
答案 1 :(得分:1)
这是因为在_source
中,您仅包含源索引中的field2
。改为这样:
POST _reindex
{
"source": {
"index": "demo",
"_source": ["field1", "field2"] <--- add field1 here
},
"dest": {
"index": "demo1"
},
"script": {
"source": "ctx._id = ctx._source['field1']; ctx._source.remove('field1')"
}
}