Переиндексировать как удаленный, так и локальный кластер вasticsearch - PullRequest
0 голосов
/ 23 марта 2020

У меня есть «index_a» в удаленном кластере эластичного поиска, который выглядит следующим образом:

{
   _index: "index_a",
   _type: "_doc",
   _id: "1",
   _score: 1,
   _source: {
      customer_id: "1234",
      customer_name: "spider",
      message: "does what ever"
   }
}, 
{
   _index: "index_a",
   _type: "_doc",
   _id: "2",
   _score: 1,
   _source: {
      customer_id: "3333",
      customer_name: "pig",
      message: "spider-pid does"
   }
}

И у меня также есть «index_a» (да, это то же имя!) В текущем кластере эластичного поиска, который я Я выполняю _reindex для, который выглядит следующим образом:

{
   _index: "index_a",
   _type: "_doc",
   _id: "2",
   _score: 1,
   _source: {
      customer_id: "3333",
      customer_name: "pig",
      message: "spider-pid does"
   }
},
{
   _index: "index_a",
   _type: "_doc",
   _id: "3",
   _score: 1,
   _source: {
      customer_id: "9876",
      customer_name: "coronavirus",
      message: "stay safe and at home"
   }
}

, как вы можете видеть, есть документы дублирования из первого "index_a" выше, но есть также новые данные, которые я хочу сохранить!

В конце концов, что я хочу получить, в моем текущем кластере эластичного поиска это index_b:

{
   _index: "index_b",
   _type: "_doc",
   _id: "1",
   _score: 1,
   _source: {
      customer_id: "1234",
      customer_name: "spider",
      message: "does what ever"
   }
}, 
{
   _index: "index_b",
   _type: "_doc",
   _id: "2",
   _score: 1,
   _source: {
      customer_id: "3333",
      customer_name: "pig",
      message: "spider-pid does"
   }
},
{
   _index: "index_b",
   _type: "_doc",
   _id: "3",
   _score: 1,
   _source: {
      customer_id: "9876",
      customer_name: "coronavirus",
      message: "stay safe and at home"
   }
}

Так что в принципе я знаю факт , что я мог бы достичь этого результата в двух различных запросах _reindex 1-й _reindex будет от удаленного кластера index_a до текущего кластера эластичного поиска index_b. И второй _reindex будет от текущего кластера эластичного поиска index_a до текущего кластера index_b. но выполнение этих двух запросов _reindex ОЧЕНЬ расточительно с точки зрения больших данных, потому что запрос в основном выполняется по каждому из них, делает c -id-один за другим и записывает / переопределяет его.

при попытке сделать это по одному запросу _reindex, я пробовал это:

POST http://current_cluster / _ reindex

{
  "source": {
    "remote": {
      "host": "http://remote_cluster/"
    },
    "index": ["index_a-from-remote", "index_a-of-current"] //renamed them to be more understood for you
  },
  "dest": {
    "index": "index_b"
  }
}

, и ответ указывает, что в удаленном кластере нет «index_a-of-current», и это имеет смысл: это произошло потому, что этот тип запроса _reindex создан для получения индексов только от удаленного кластера эластичного поиска.

, поэтому мой вопрос:

есть ли способ выполнить один запрос _reindex, который будет принимать и «index_a» из удаленного кластера, а также «index_a» текущего кластера, и будет переиндексировать их обоих в "index_b" в текущем кластере?

Я был бы рад, если бы кто-нибудь из облаков пролил свет на этот вопрос, поскольку я попробовал кучу других вещей в запросе и прочитал Reindex API документации и пока не нашел ответа. TNX за любую помощь!

...