#elasticsearch
#эластичный поиск
Вопрос:
Я пытаюсь удалить data.properties.review_meta
поле, потому что это вызывает проблемы
POST /_reindex
{
"source": {
"index": "analytics-prod-2020.11.05"
},
"dest": {
"index": "analytics-prod-2020.11.05.02"
},
"conflicts": "proceed",
"script" : {
"source": "ctx._source.data.remove('properties.review_meta')"
}
}
код не работает с сообщением об ошибке
"failures" : [
{
"index" : "analytics-prod-2020.11.05.02",
"type" : "_doc",
"id" : "gksugnUBaMafnb1n2Iqy",
"cause" : {
"type" : "mapper_parsing_exception",
"reason" : "object mapping for [data.properties.review_meta] tried to parse field [review_meta] as object, but found a concrete value"
},
"status" : 400
},
{
"index" : "analytics-prod-2020.11.05.02",
"type" : "_doc",
"id" : "jUsvgnUBaMafnb1nsrkC",
"cause" : {
"type" : "mapper_parsing_exception",
"reason" : "object mapping for [data.properties.review_meta] tried to parse field [review_meta] as object, but found a concrete value"
},
"status" : 400
}
]
исходный индекс (2020.11.05) имеет
"review_meta" : {
"type" : "long"
},
индекс dest(2020.11.05.02) имеет шаблон индекса
{
"review_meta" : {
"match" : "review_meta",
"mapping" : {
"type" : "object"
}
}
}
Ответ №1:
Вместо этого ваш сценарий должен быть таким, и тогда он будет работать:
ctx._source.data.properties.remove('review_meta')
Комментарии:
1. действительно, это работает.. Мне пришлось добавить ctx._source.containsKey(‘data’) проверку и по пути
2. Круто, рад, что это помогло. Действительно, вам нужно убедиться, что ключи существуют, хороший момент.