ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Alias & Reindex
    BackEnd/Elasticsearch API 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": {}
      }
    }

     

    [참고자료]

    반응형

    'BackEnd > Elasticsearch API' 카테고리의 다른 글

    Analyzer  (0) 2025.03.18
    Index Template  (0) 2025.03.16
    Mapping parameters  (0) 2025.03.14
    Mapping  (0) 2025.03.13
    Analysis  (0) 2025.03.11

    댓글

Designed by Tistory.