![[ElasticSearch] 멀티 필드(Multi Field)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOCvWG%2FbtsOk5TGypY%2FK9X8czaSnldCp3UktgPFbK%2Fimg.png)
[ElasticSearch] 멀티 필드(Multi Field)Back-End/ElasticSearch2025. 6. 2. 00:09
Table of Contents
이 글은 인프런의 지식 공유자 박재성님의 강의를 듣고 개인적으로 정리하는 글임을 알립니다.
Multi Field
- 하나의 필드에 text와 keyword 타입을 동시에 사용하고 싶을 때 사용
데이터 타입에서 text는 유연한 검색이 필요할 때 사용하고, keyword는 정확한 검색이 필요할 때 사용한다.
그런데 유연한 검색과 정확한 검색 둘 다 하고 싶은 경우가 있을 수 있다.
예를 들어, 상품 카테고리와 이름 필드에 저장된 필드 값에 대해 검색할 때는 유연하게 검색되게 하고 싶고, 정확한 비교를 통해 특정 카테고리를 기준으로 필터링을 하고 싶을 수 있다.
즉, text 타입과 keyword 타입을 동시에 사용하고 싶은 경우이다.
인덱스 생성
PUT /products { "mappings": { "properties": { "name": { "type": "text", "analyzer": "nori" }, "category": { "type": "text", "analyzer": "nori", "fields": { "raw": { // 서브 필드명 (다른 이름으로 설정해도 됨) "type": "keyword" } } } } } } |
- 위와 같이 설정하면 category 필드에 하나의 데이터를 삽입하더라도 text, keyword 타입의 형태로 나눠서 보관하게 된다.
데이터 삽입
POST /products/_doc { "name": "삼성 세탁기", "category": "특수 가전제품" } |
text 타입은 토큰으로 분리해서 저장하지만, keyword 타입은 값 자체를 통째로 저장한다.
그래서 category에 특수 가전제품이라는 값을 삽입했을 때 아래와 같이 저장된다.
category (text 타입) | category.raw (keyword 타입) |
특수 | 특수 가전제품 |
가전 | |
제품 |
Anaylze API로 확인해보면 위 표와 같이 동일한 결과를 나타내는것을 확인할 수 있다.
POST /products/_analyze { "field": "category", "text": "특수 가전제품" } POST /products/_analyze { "field": "category.raw", "text": "특수 가전제품" } |
검색
name, category을 활용해 유연하게 검색하고 싶을 때
POST /products/_search { "query": { "multi_match": { "query": "가전", "fields": ["name", "category"] } } } |
특수 가전제품 카테고리의 상품만 검색하고 싶을 때
POST /products/_search { "query": { "term": { "category.raw": "특수 가전제품" } } } |
'Back-End > ElasticSearch' 카테고리의 다른 글
[ElasticSearch] 검색어 추천 기능(search_as_you_type) (0) | 2025.06.02 |
---|---|
[ElasticSearch] 오타 허용 검색, 하이라이팅, 페이지네이션 및 정렬 (0) | 2025.06.01 |
[ElasticSearch] match, term, bool (3) | 2025.06.01 |
[ElasticSearch] 한글 검색 최적화(Nori Analyzer) (0) | 2025.06.01 |
[ElasticSearch] 데이터 타입(data type)과 매핑(mapping) (0) | 2025.05.31 |