Как удалить несколько полей из индекса? - PullRequest
0 голосов
/ 12 апреля 2019

Я хотел бы удалить несколько полей из индекса, например ('person_full', 'company_full'). Использование ES: 5.6.14

Чтобы удалить одно поле -> следующий код работает хорошо

POST firma-2019.04/_update_by_query?conflicts=proceed
{
    "script": {
        "source": "ctx._source.remove('person_full')",
        "lang": "painless"
    }
}

Но я хотел бы удалить несколько полей одновременно, и этот код не работает.

POST firma-2019.04/_update_by_query?conflicts=proceed
{
    "script": {
        "source": "ctx._source.remove('person_full','company_full')",
        "lang": "painless"
    }
}

Заранее благодарю за помощь

Ответы [ 2 ]

2 голосов
/ 12 апреля 2019

Следующий запрос должен работать:

POST firma-2019.04/_update_by_query?conflicts=proceed
{
    "script": {
        "source": "ctx._source.remove('person_full');ctx._source.remove('company_full')",
        "lang": "painless"
    }
}

Чтобы удалить больше полей, добавьте больше операторов удаления в скрипт.

1 голос
/ 13 апреля 2019

Вы не хотите обновлять все документы в индексе. Представьте, если у вас есть миллионы, скрипт обновит все документы. Вместо этого добавьте дополнительную проверку, чтобы увидеть, существует ли поле, прежде чем пытаться удалить его.

Ниже будут обновляться только документы и удаляются поля, в которых существует person_full или company_full.

POST firma-2019.04/_update_by_query?conflicts=proceed
{
  "query": {
    "bool": {
      "should": [
        {
          "exists": {
            "field": "person_full"
          }
        },
        {
          "exists": {
            "field": "company_full"
          }
        }
      ]
    }
  },
  "script": {
    "source": "ctx._source.remove('person_full'); ctx._source.remove('company_full');",
    "lang": "painless"
  }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...