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) 기능을 활용하면
✔ 동일한 데이터를 여러 방식으로 색인할 수 있으며
✔ 검색 최적화(정렬 & 집계) 및 다국어 분석에도 매우 유용합니다.
다음 학습에서는 멀티 필드를 활용한 고급 검색 최적화 및 성능 개선 전략을 다루겠습니다! 🚀
'Elastic Search > 인덱스 설정과 매핑' 카테고리의 다른 글
[Mappings] 기타 필드 타입 (IP, Range, Binary) 완벽 정리 (0) | 2025.02.03 |
---|---|
[Mappings] 위치 정보 (Geo Point & Geo Shape) 완벽 정리 (0) | 2025.02.03 |
[Mappings] Object vs Nested 타입 완벽 정리 (0) | 2025.02.03 |
[Mappings] Boolean(불리언) 타입 완벽 정리 (0) | 2025.02.03 |
[Mappings] 날짜(Date) 타입 완벽 정리 (0) | 2025.02.03 |