BackEnd/Elasticsearch API

Alias & Reindex

hanseom 2025. 3. 15. 11:00
반응형

  Elasticsearch에서 인덱스의 매핑은 변경할 수 없습니다. 이는 색인된 데이터가 특정한 구조와 형식으로 저장되기 때문입니다. 매핑을 변경하면 기존 데이터가 더이상 유효하지 않거나 잘못된 형식으로 해석될 수 있으므로, 매핑을 변경하려면 새로운 인덱스를 생성하고 데이터를 재색인해야 합니다.

 

Alias & Reindex

  Alias는 인덱스의 매핑 변경 시 유용합니다. 새로운 인덱스를 생성하고 데이터를 재색인(Reindex)한 후, Alias를 업데이트하여 검색 요청을 새로운 인덱스로 전달할 수 있습니다. 이는 검색 서비스 중단 없이 인덱스를 관리하는 방법입니다. 또한, Alias는 여러 인덱스를 하나의 이름으로 통합하여 검색할 수 있게 합니다(Multi Index).

 

Alias 사용 방법

1. index를 생성하고 데이터를 넣은 후 Alias를 설정합니다.

# 기존 인덱스
PUT /old_index
{
  "mappings": {
    "properties": {
      "product_id": {
        "type": "integer"
      }
    }
  }
}

# Insert Documents
POST /old_index/_doc/1
{
  "product_id": 100
}

POST /old_index/_doc/2
{
  "product_id": 200
}

# Alias 설정
POST /_aliases
{
  "actions": [
    {
      "add": {
        "index": "old_index",
        "alias": "my_alias"
      }
    }
  ]
}

 

 

2. 매핑 변경이 필요한 경우, 새로운 인덱스를 생성하고 데이터를 재색인(Reindex) 합니다.

# 새로운 인덱스 생성
PUT /new_index
{
  "mappings": {
    "properties": {
      "product_id": {
        "type": "keyword"
      }
    }
  }
}

# 데이터 재색인(Reindex)
POST /_reindex
{
  "source": {
    "index": "old_index"
  },
  "dest": {
    "index": "new_index"
  },
  "script": {
    "source": """
        ctx._source.product_id = ctx._source.product_id.toString()
    """
  }
}

 

3. 기존 Alias를 새로운 인덱스로 업데이트합니다.

POST _aliases {
  "actions": [
    {
      "remove": {
        "index": "old_index",
        "alias": "my_alias"
      }
    },
    {
      "add": {
        "index": "new_index",
        "alias": "my_alias"
      }
    }
  ]
}

 

4. 검색 요청

GET /my_alias/_search
{
  "query": {
    "match_all": {}
  }
}

 

[참고자료]

반응형