elasticsearch 使用elasticsearch中的父索引字段复制/更新子索引
在弹性2.4中,我有一个带有父子关系的索引 此索引有两种类型,一种是父索引,另一种是子索引。除了公共字段
elasticsearch 使用elasticsearch中的父索引字段复制/更新子索引,
elasticsearch,groovy,migration,elasticsearch-2.4,
elasticsearch,Groovy,Migration,Elasticsearch 2.4,在弹性2.4中,我有一个带有父子关系的索引 此索引有两种类型,一种是父索引,另一种是子索引。除了公共字段field1,这两个字段都有不同的映射 索引映射如下所示: 键入父项: { "properties": { "field1": { "type": "long" }, "field2": { "type": "long" } } } 键入子项: { "properties": { "field3": {
field1
,这两个字段都有不同的映射
索引映射如下所示:
键入父项:
{
"properties": {
"field1": {
"type": "long"
},
"field2": {
"type": "long"
}
}
}
键入子项:
{
"properties": {
"field3": {
"type": "long"
},
"field1": {
"type": "long"
}
}
}
现在我已经更新了子索引映射,并添加了另一个与父索引相同的字段,即field2
现在,子对象的映射如下所示:
{
"properties": {
"field3": {
"type": "long"
},
"field1": {
"type": "long"
}
"field2": {
"type": "long"
}
}
}
现在,我想在公共字段field1
的基础上将值从父字段复制到子字段。
子索引中的文档应更新为field2
,该字段具有公共field1
我尝试了\u reindex
api和update\u by\u查询,但没有找到任何好的快速解决方案。正如我尝试的\u reindex
api,其源和目标如下所示,但有一个限制,即它将创建新文档,而不是通过公共领域(即field1
)更新文档
我尝试了下面的解决方案
index_name/_reindex
{
"source": {
"index": "index_name",
"type": "parent"
},
"dest": {
"index": "index_name",
"type": "child"
},
"script": {
"inline": "ctx._dest.field2 = ctx._source.field2"
}
}
这给了我一个错误,我们不能使用与源和目标相同的索引。我怎样才能解决同样的问题?或者有更好的方法来做同样的事情。你能把所有这些放在一个新索引中,然后抛弃旧索引吗?我明白你的观点,但问题是我必须在子索引中的旧字段中再添加一个字段@DoctorLove我不认为我能提供适当的帮助,但我也有类似的事情要做,当我为我添加的每个记录手工制作一个id时,它在插入过程中起到了帮助作用,因为我可以找到我想要的并添加新字段。