Elasticsearch: 멀티 필드 (Multi Field) 완벽 정리

Elasticsearch에서는 하나의 필드에 여러 개의 분석 방식(Analyzer) 또는 타입을 적용할 수 있습니다.
하나의 필드 값을 여러 개의 역색인 방식으로 저장 가능
Text 필드에 Keyword 타입을 추가하여 검색 & 정렬 가능
다국어 문서 분석을 위해 여러 개의 애널라이저 적용 가능

이번 글에서는 멀티 필드(Multi Field)의 개념, 설정 방법, 활용 예제, 그리고 실전 적용 방법까지 상세히 알아보겠습니다.


1. 멀티 필드 개요

특징 설명 활용 사례
하나의 필드에 여러 타입 저장 text, keyword 타입을 함께 저장 가능 검색 & 정렬 모두 필요할 때
여러 개의 애널라이저 적용 가능 동일한 필드를 다른 방식으로 분석 가능 다국어 검색 최적화
동일한 데이터를 다양한 방법으로 색인 필드명 + . 을 추가하여 관리 message.english, message.nori

2. 멀티 필드 설정

🔹 멀티 필드 기본 개념

✔ fields 옵션을 사용하여 하나의 필드를 여러 개의 서브 필드로 확장
✔ text 타입은 검색용으로 사용하고, keyword 타입은 정렬/집계용으로 활용

📌 예제 1: text + keyword 타입의 멀티 필드 설정

PUT my_index
{
  "mappings": {
    "properties": {
      "title": {
        "type": "text",
        "fields": {
          "keyword": {
            "type": "keyword"
          }
        }
      }
    }
  }
}

title 필드는 text 타입이지만 title.keyword는 keyword 타입으로 저장됨

📌 예제 2: 데이터 저장

PUT my_index/_doc/1
{
  "title": "Elasticsearch Multi Field Test"
}

이제 title 필드는 title.keyword 서브 필드와 함께 저장됨

📌 예제 3: title 필드 검색 (text 타입)

GET my_index/_search
{
  "query": {
    "match": {
      "title": "Elasticsearch"
    }
  }
}

text 타입이므로 형태소 분석 후 검색 가능

📌 예제 4: title.keyword 필드 검색 (keyword 타입)

GET my_index/_search
{
  "query": {
    "term": {
      "title.keyword": "Elasticsearch Multi Field Test"
    }
  }
}

keyword 타입이므로 정확한 문자열 검색만 가능

📌 예제 5: keyword 타입으로 정렬하기

GET my_index/_search
{
  "sort": [
    { "title.keyword": "asc" }
  ]
}

정확한 문자열 기준으로 정렬 가능


3. 멀티 필드에서 애널라이저(Analyzer) 적용

🔹 멀티 필드를 활용한 다국어 검색

✔ text 타입 필드에 여러 개의 애널라이저를 적용할 수 있음
한국어, 영어, 일본어 등 다국어 지원에 유용

📌 예제 6: english, nori(한국어) 애널라이저를 적용한 멀티 필드 설정

PUT my_index
{
  "settings": {
    "analysis": {
      "analyzer": {
        "nori_analyzer": {
          "tokenizer": "nori_tokenizer"
        }
      }
    }
  },
  "mappings": {
    "properties": {
      "message": {
        "type": "text",
        "fields": {
          "english": {
            "type": "text",
            "analyzer": "english"
          },
          "nori": {
            "type": "text",
            "analyzer": "nori_analyzer"
          }
        }
      }
    }
  }
}

message.english → 영어 전용 애널라이저 적용
message.nori → 한국어 전용 애널라이저 적용

📌 예제 7: 데이터 저장

PUT my_index/_doc/1
{
  "message": "My favorite 슈퍼영웅 is Iron Man"
}

Elasticsearch는 message, message.english, message.nori 필드로 각각 색인

📌 예제 8: message 필드에서 "영웅" 검색 (text 타입)

GET my_index/_search
{
  "query": {
    "match": {
      "message": "영웅"
    }
  }
}

기본 message 필드에서는 검색되지 않음

📌 예제 9: message.nori 필드에서 "영웅" 검색 (한국어 애널라이저 적용)

GET my_index/_search
{
  "query": {
    "match": {
      "message.nori": "영웅"
    }
  }
}

한국어 애널라이저를 적용한 message.nori 필드에서는 정상적으로 검색됨


4. 정리

     
멀티 필드란? 하나의 필드를 여러 개의 타입/애널라이저로 저장하는 방식 fields 옵션 사용
주요 활용 예시 text + keyword 조합으로 검색 & 정렬 지원 title.keyword
다국어 검색 지원 같은 데이터를 여러 애널라이저로 색인 message.english, message.nori
정확한 검색 keyword 타입을 활용하여 정확한 문자열 검색 가능 "match": { "title.keyword": "..." }
검색 최적화 text 필드는 전체 검색, keyword 필드는 필터링 & 정렬 검색 속도 개선 가능

5. 학습 가이드

1️⃣ 멀티 필드를 활용하여 text + keyword 조합을 테스트
2️⃣ 여러 애널라이저(english, nori)를 적용하여 다국어 검색 실습
3️⃣ 정확한 검색(Keyword)과 유사 검색(Text)의 차이를 비교


6. 마무리

Elasticsearch의 멀티 필드(Multi Field) 기능을 활용하면
동일한 데이터를 여러 방식으로 색인할 수 있으며
검색 최적화(정렬 & 집계)다국어 분석에도 매우 유용합니다.

다음 학습에서는 멀티 필드를 활용한 고급 검색 최적화 및 성능 개선 전략을 다루겠습니다! 🚀

+ Recent posts