Как переименовать имена полей при индексировании документа в ElasticSearch - PullRequest
0 голосов
/ 17 октября 2019

У меня есть объект JSON с некоторыми полями, подобными этим: -

{
    "desc": "this is test description",
    "name": "some random name",
}

При индексации этого документа я хотел бы изменить имена полей, и мой документ после индексирования должен выглядеть следующим образом: -

{
    "description": "this is test description",
    "user_name": "some random name",
}

Я читал о процессоре Ingest конвейера, но они переименовываются только после создания поля. Можно ли как-то изменить имена полей при индексации?

1 Ответ

2 голосов
/ 17 октября 2019

Способ сделать это - использовать Pipeline. Общая идея заключается в том, что вы определяете конвейер и даете ему имя в своем кластере. Затем вы можете ссылаться на него при индексации данных, и отправленные вами данные будут передаваться через этот конвейер для их преобразования. Обратите внимание, что конвейеры будут работать только на узлах, помеченных как узлы «загрузки».

https://www.elastic.co/guide/en/elasticsearch/reference/current/pipeline.html

Для конкретного переименования вы можете использовать этот процессор: https://www.elastic.co/guide/en/elasticsearch/reference/current/rename-processor.html

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

Определите конвейер в вашем кластере с именем:

PUT _ingest/pipeline/my-pipeline-name
{
  "description" : "rename user name",
  "processors" : [
    {
      "rename" : {
        "field": "name",
        "target_field": "user_name"
      },
      "rename" : {
        "field": "field2",
        "target_field": "newfield2"
      }
    }
  ]
}

Загрузите документ, используя конвейер:

POST /some_index/_doc/?pipeline=my-pipeline-name
{
    "desc": "this is test description",
    "name": "some random name",
}
...