test1 인덱스에서 tags, persons 필드를 삭제하고자 할 때
Elasticsearch 초보자라 제대로 한 건지는 모르겠지만 저는 아래와 같이 처리하였습니다.
1. 기존 인덱스의 데이타를 새 인덱스에 reindex
[root@localhost ~]# curl -XPOST "http://192.168.0.203:9200/_reindex?pretty" -H 'Content-Type: application/json' -d'
{
"source": { "index": "test1" },
"dest": { "index": "test-tmp" }
}'
2. 특정 필드들 삭제
[root@localhost ~]# curl -XPOST "http://192.168.0.203:9200/test-tmp/_update_by_query?pretty" -H 'Content-Type: application/json' -d'
{
"script": {
"inline": "ctx._source.remove(\"tags\");ctx._source.remove(\"persons\");",
"lang": "painless"
}
}'
/*
참고) 특정 조건에 부합하는 경우에만 삭제해주려면 아래와 같이 query를 만들어서 실행
[root@localhost ~]# curl -XPOST "http://192.168.0.203:9200/test-tmp/_update_by_query?pretty" -H 'Content-Type: application/json' -d'
{
"script": {
"inline": "ctx._source.remove(\"tags\")",
"lang": "painless"
},
"query": {
"bool": {
"must": {
"exists": {
"field": "tags"
}
}
}
}
}'
*/
3. 삭제된 필드가 없는 인덱스 새로 생성
tags 필드를 remove했지만 test-tmp 인덱스 정보를 확인해보면 properties 항목에 tags 필드가 보여져서 아래와 같이 reindex를 한번 더 진행하였습니다.
더 좋은 방법이 있을 것 같지만, 지금 아는 지식 내에서는 이 방법밖에 생각이 나지 않아 reindex로 처리하였습니다.
[root@localhost ~]# curl -XPOST "http://192.168.0.203:9200/_reindex?pretty" -H 'Content-Type: application/json' -d'
{
"source": { "index": "test-tmp" },
"dest": { "index": "test2" }
}'
4. 불필요한 인덱스 삭제
[root@localhost ~]# curl -XDELETE "http://192.168.0.203:9200/test-tmp?pretty"
참고) tag 필드에 있는 데이타를 tags 필드에 넣고 tag 필드 삭제
[root@localhost ~]# curl -XPOST "http://192.168.0.203:9200/test-tmp/_update_by_query?pretty" -H 'Content-Type: application/json' -d'
{
"script": {
"inline": "ctx._source.tags = ctx._source.tag; ctx._source.remove(\"tag\");",
"lang": "painless"
},
"query": {
"bool": {
"must": {
"exists": {
"field": "tag"
}
}
}
}
}'
'work' 카테고리의 다른 글
maven - scope / goal 정리 (0) | 2020.02.17 |
---|---|
MAC OS Dock 이동하기 (0) | 2020.01.29 |
[Flask] CORS - Access to XMLHttpRequest at * from origin * has been blocked by CORS policy (0) | 2020.01.17 |
신뢰할수 있는 루트 인증서 등록 (0) | 2020.01.14 |
[CentOS7] nginx 설치 (0) | 2019.11.05 |