#elasticsearch #scripting #transformation
#elasticsearch #сценарии #преобразование
Вопрос:
Я создал преобразование ElasticSearch следующим образом:
"source": {
"index": "input_index"
},
"dest" : {
"index" : "output_index"
},
"pivot": {
"group_by": {
"device_id": { "terms": { "field": "device_id.keyword" }}
},
"aggregations": {
"@timestamp": {
"max": {
"field": "@timestamp"
}
},
"latest_doc": {
"scripted_metric": {
"init_script": ...,
"map_script": ... }",
"combine_script": "return state",
"reduce_script": .... return last_doc (last_doc contains document from input_index)
}
}
}
}
Это отлично работает, но все поля в индексе назначения начинаются с «latest_doc»..
Есть ли способ предотвратить предшествование имен полей этой метке latest_doc ?
(В противном случае мне придется использовать разные шаблоны индексов для входных индексов и выходных индексов)
Ответ №1:
найдено обходное решение для всех, кто хочет знать:
добавлен входной конвейер:
PUT _ingest/pipeline/remove_trailing_
{
"processors": [{
"script": {
"source": """
for(item in ctx['latest_doc'].entrySet()) {
def f1 = 'latest_doc.' item.getKey();
def f2 = item.getKey();
ctx[f2] = item.getValue();
}
ctx.remove('latest_doc');
"""
}
}
]
}