Скопируйте / обновите дочерний индекс, используя поле родительского индекса в asticsearch
У меня есть индекс с отношением родитель-ребенок в упругой 2.4.
Этот индекс имеет 2 типа, один родительский, а второй дочерний. Оба имеют разные сопоставления, кроме общего поля, которое field1
,
Отображения индекса выглядят следующим образом:
тип parent
:
{
"properties": {
"field1": {
"type": "long"
},
"field2": {
"type": "long"
}
}
}
тип child
:
{
"properties": {
"field3": {
"type": "long"
},
"field1": {
"type": "long"
}
}
}
Теперь я обновил отображение дочернего индекса и добавил еще одно поле, аналогичное родительскому индексу field2.
Теперь отображение дочернего элемента выглядит так:
{
"properties": {
"field3": {
"type": "long"
},
"field1": {
"type": "long"
}
"field2": {
"type": "long"
}
}
}
Теперь я хочу скопировать значение из родительского в дочернее на основе общего поля, которое field1
, документ в дочернем индексе должен обновляться field2
которые имеют общее field1
,
Я попробовал _reindex
api и update_by_query, но не нашли хорошего и быстрого решения, чтобы сделать то же самое. Как я пытался _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"
}
}
Это дает мне ошибку, что мы не можем использовать тот же индекс, что и источник и пункт назначения. Как я могу исправить то же самое? или есть лучший подход, чтобы сделать то же самое.