Скопируйте / обновите дочерний индекс, используя поле родительского индекса в 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"
  }
}

Это дает мне ошибку, что мы не можем использовать тот же индекс, что и источник и пункт назначения. Как я могу исправить то же самое? или есть лучший подход, чтобы сделать то же самое.

0 ответов

Другие вопросы по тегам