[기존 매핑을 업데이트하기]
- 일반적으로 업데이트 불가
- 기존 도큐먼트들을 업데이트하는 게 문제가 있기 때문 (ex. 텍스트 값들은 이미 분석되어 있음)
- 전체 데이터 구조를 다시 만들어야 할 수도 있음
- 비어있는 인덱스여도 매핑을 업데이트하거나 삭제하는 건 불가함.
- 방법은 새로운 인덱스로 옮기는 것 뿐..
- “ignore_above” 옵션만 가능
[Reindex API]
- 새로운 매핑과 인덱스를 PUT 해준다.
- POST /_reindex API를 사용한다.
POST /_reindex
{
"source": {
"index": "reviews"
},
"dest": {
"index": "reviews_new"
}
}
- 리인덱싱은 생각보다 자주 필요하다 (비즈니스 요구사항이 바뀔 수도 있고.. 저장 형태를 바꿔야 할 수도 있고..)
- 데이터형은 실제 값이 어떻게 저장되었는지를 반영하지 않는다.
- _source 는 저장 시점에 제공된 필드의 값을 가지고 있다. (따라서 저장 형태는 int -> string으로 바뀌었더라도 조회 결과를 보면 int 타입처럼 보일 수 있다)
- 리인덱싱을 할 때 _source의 값도 바꿀 수 있다. -> 스크립트 예시가 있음
- 혹은 앱 단에서 이를 해결할 수도 있다.
POST /_reindex
{
"source": {
"index": "reviews"
},
"dest": {
"index": "reviews_new"
},
"script": {
"source": """
if (ctx._source.product_id != null) {
ctx._source.product_id = ctx._source.product_id.toString();
}
"""
}
}
- source안에 “query” 를 넣어 특정 도큐먼트들만 가져와서 리인덱싱 할 수 있다.
[필드 삭제]
- 일반적으로 삭제될 수 없으므로 그냥 비어두면 된다.
- 데이터 셋이 커지면 기존 도큐먼트들에 이 필드가 있는 것이 저장소를 먹을 수 있으니 삭제하는 게 가치 있을 수도 있다.
- POST /reindex 에 source.source : [“content”, “created_at”] 이런식으로 옵션을 줘서 원하는 필드만 리인덱싱 가능
- 필드 리네이밍은 스크립트를 통해서 가능하다.
- _source는 자바의 해시맵이다. Remove를 하면 key를 삭제함과 동시에 value를 가져오므로 아래와 같은 할당이 가능
"script": {
"source": """
# Rename "content" field to "comment"
ctx._source.comment = ctx._source.remove("content")
"""
}
[리인덱싱 특징]
- 스크립트에 ctx.op를 사용하는 법
- query 파라미터 내에서 ctx.op를 사용할 수 있다.
- query 파라미터를 사용하는 게 퍼포먼스가 좋고 선호된다.
- “noop” (리인덱싱을 하지 않음) 과 “delete” (dest 인덱스에 있으면 삭제 됨)은 다르다
- 버전 충돌을 해결하는 파라미터 같은 것들이 더 있다.
- 기본적으로 버전 충돌은 쿼리를 abort 시킴
- 도큐먼트를 리인덱싱 하기 전에 source 인덱스의 스냅샷이 생성된다.
- Reindex API는 배치에서도 수행된다.
- Update by query, Delete by Query api 랑 유사
- 내부적으로 Scorll API를 사용한다 -> 효율적으로 리인덱싱 가능
- 성능 영향을 줄이기 위해 throttling 을 구성할 수 있다.
- 프로덕션 클러스터에서 유용함
'TIL > 엘라스틱 서치' 카테고리의 다른 글
Elastic Search : Complete Guide to ElasticSearch - 관계형처럼 조인하기 (1) | 2024.02.05 |
---|---|
Elastic Search : Complete Guide to ElasticSearch - 매핑과 분석기에 대한 추천 (0) | 2024.02.04 |
Elastic Search : Complete Guide to ElasticSearch - 매핑 (1) | 2024.01.21 |
Elastic Search : Complete Guide to ElasticSearch - Mapping & Analysis (0) | 2024.01.17 |
Elastic Search : Complete Guide to ElasticSearch - Bulk API (0) | 2024.01.16 |
댓글