1

ES 1.4에서 ES 5.5로 마이그레이션하려고합니다. 인덱스 중 하나에서 필드의 이름을 변경하고 값을 대문자으로 변환해야합니다. 필자는 필드 이름의 변경으로 다시 색인을 생성하고 원치 않는 필드를 제거 할 수 있지만 값을 대문자로 변환하는 데 도움이 필요합니다.reindex를 사용하는 동안 대문자로 변환하고 특정 필드를 삭제하려면 어떻게해야합니까?

이 내가 위의 POST 요청이이 값입니다으로 "제품"을 "PRODUCT_NAME"를 제거하고 생성 할 수 있습니다

POST _reindex?wait_for_completion=false 
{ 
    "source": { 
    "remote": { 
     "host": "http://source_ip:17002" 
    }, 
    "index": "log_event_2017-08-11", 
    "size": 1000, 
    "query": { 
     "match_all": {} 
    } 
    }, 
    "dest": { 
    "index": "logs-ics-2017-08-11" 
    }, 
    "script": { 
    "inline": "ctx._source.product = ctx._source.remove(\"product_name\")", 
    "lang": "painless" 
    } 
} 

을 시도하는 것이다. 그래서 "제품"docs 값을 대문자로하려면 인라인 스크립트 아래에서 시도했지만 null_pointer_exception을 제공합니다.

나는 Elasticsearch 스크립팅을 처음 사용합니다. 도와주세요. 당신이 _reindex API를 실행하기 전에

"ctx._source.product = ctx._source.remove(\"product_name\");ctx._source.product = doc[\"product\"].toUpperCase()" 

답변

0

당신은 ingest pipeline를 추가 할 수 있습니다. 처리기가 rename 필드에 있고 필드를 uppercase으로 변환합니다. 그러면 다시 색인 호출에 파이프 라인을 통합 할 수 있습니다.

{ 
    "source": { 
    "index": "source" 
    }, 
    "dest": { 
    "index": "dest", 
    "pipeline": "<id_of_your_pipeline>" 
    } 
}