скопируйте / обновите дочерний индекс, используя поле родительского индекса вasticsearch - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть индекс с отношением родитель-потомок в упругом 2.4.

Этот индекс имеет 2 типа, один является родителем, а второй - дочерним.Оба имеют разные сопоставления, за исключением общего поля, которое field1.

Отображения индекса выглядят следующим образом:

type parent:

{
  "properties": {
    "field1": {
      "type": "long"
    },
    "field2": {
      "type": "long"
    }
  }
}

type 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"
  }
}

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

...