[elasticsearch] index mapping

yoon-bomi·2023년 3월 28일
0

Dynamic mapping

  • 별도의 매핑을 지정하지 않았을 경우, 처음 인덱스를 생성하고 데이터를 입력하면 elasticsearch 가 자동으로 동적 매핑을 진행동적 매핑의 경우 원하는대로 검색이 동작하지 않을 수도 있기 때문에 mapping 을 따로 지정해주는 것을 권장한다. (Explicit mapping)

  • 동적 매핑 시 text 타입은 text 와 keyword 두 가지의 멀티 필드를 생성한다.멀티 필드를 지정할 경우, 필드 개수만큼 용량이 더 소모되므로 keyword 로만 관리할 필드는 keyword 필드, text 로만 관리할 필드는 text 필드로 하는 게 좋다.

참고


Explicit mapping

  • 인덱스 생성 시 커스터마이징 해서 지정해주는 매핑

  • 데이터가 들어있을 경우 매핑 변경은 불가능하기 때문에 인덱스를 지우고 새로 mapping 을 해야한다.

참고




특정 필드의 매핑 바꾸기

  1. 인덱스를 만들고 데이터를 하나 넣어서 dynamic mapping 을 생성한다.
  2. 해당 mapping 을 불러와서 가공한다.
  3. 기존 인덱스를 지우고 다시 인덱스를 생성할 때, 시 가공한 mapping 을 넣어서 explicit mapping 으로 만든다.
    PUT http://localhost:1111/haulla-account
// body
{
  "mappings": {
    "properties": {
      "accountManagerId": {
        "type": "text",
        "fields": {
          "keyword": {
            "type": "keyword",
            "ignore_above": 256
          }
        }
      },
      ...      
      "role": {
        "type": "keyword", // 타입을 text -> keyword 로 변경
        "fields": {
          "keyword": {
            "type": "keyword",
            "ignore_above": 256
          }
        }
      },
     ...
      "vertical": {
        "type": "text",
        "fields": {
          "keyword": {
            "type": "keyword",
            "ignore_above": 256
          }
        }
      }
    }
  }
}

새로 만든 role 타입이 keyword 로 mapping 된 것을 확인할 수 있다.

profile
웹 풀스택에서 백엔드로 진화중 🧚🏻‍♀️

0개의 댓글