Попытка использовать Elasticsearch Bulk API, когда _id равен определенному полю - PullRequest
0 голосов
/ 09 октября 2019

Я пытаюсь массово вставить документы в индекс. Мне нужно, чтобы _id было равно конкретному полю, которое я вставляю. Я использую ES v6.6

POST productv9/_bulk
{ "index" : { "_index" : "productv9", "_id": "in_stock"}}
{ "description" : "test", "in_stock" : "2001"}

GET productv9/_search
{
  "query": {
    "match": {
      "_id": "2001"
    }
  }
}

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

1 Ответ

1 голос
/ 10 октября 2019

Я предлагаю создать конвейер загрузки , который установит _id вашего документа на основе значения поля in_stock.

Сначала создайтеконвейер:

PUT _ingest/pipeline/set_id
{
  "description" : "Sets the id of the document based on a field value",
  "processors" : [
    {
      "set" : {
        "field": "_id",
        "value": "{{in_stock}}"
      }
    }
  ]
}

Затем вы можете сослаться на конвейер в массовом вызове:

POST productv9/doc/_bulk?pipeline=set_id
{ "index" : {}}
{ "description" : "test", "in_stock" : "2001"}

Позвонив по номеру GET productv9/_doc/2001, вы получите свой документ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...