이번 글에서는 Elasticsearch에서 자주 사용되는 keyword 타입과 text 타입에 대해 설명드리겠습니다.
1. keyword 타입
먼저 keyword 타입은 정확한 값 검색에 적합합니다.
예를 들어, 이메일 주소나 고유 ID, 국가 코드와 같은 것들이 이에 해당합니다.
keyword 타입은 텍스트를 그대로 저장하고 분석하지 않기 때문에, 입력한 값 그대로 저장됩니다.
즉, 대소문자 구분도 하고 공백도 그대로 유지됩니다. 또한 필터링,집계, 정렬인 Aggregation에 최적화 되어 있습니다.
예시 매핑:
{
"properties": {
"email": {
"type": "keyword"
}
}
}
장점:
• 정확하게 문자 일치 검색이 가능하고, 집계나 필터링 속도가 빠릅니다.
• 예를 들어, 특정 국가 코드나 이메일 주소를 검색할 때 유용합니다.
2. text 타입
text 타입은 긴 텍스트를 저장할 때 사용됩니다.
블로그 글이나 기사 내용처럼 긴 텍스트를 검색할 때는 이 타입이 적합합니다. 대소문자를 구분하지 않으며,
text 타입은 텍스트를 분석기에서 처리하고, 단어 단위로 나누며, 불용어(stop words) 제거나 스테밍(stemming)도 적용됩니다.
주로 한글 형태소 분석기인 nori 분석기를 사용하며 노리분석기 옵션에서 decompound_mode를 사용하여 어근과 합성어를 분리해서 검색에 용이하게 설정할 수 있습니다.
- none : 어근을 분리하지 않고 완성된 합성어만 저장합니다.
- discard (디폴트) : 합성어를 분리하여 각 어근만 저장합니다.
- mixed : 어근과 합성어를 모두 저장합니다.
예시 매핑:
{
"properties": {
"content": {
"type": "text"
}
}
}
장점:
• 긴 텍스트에서 유사도 기반으로 검색할 수 있습니다.
• 예를 들어, 블로그 글이나 뉴스 기사 내용에서 특정 단어나 문장을 찾을 때 유용합니다.
3. 두 타입의 차이점
keyword | text | |
용도 | 정확한 매칭, 필터링, 집계, 정렬 | 텍스트 검색, 분석 |
검색 방식 | 정확한 일치 검색 | 유사도 기반 검색 (부분 일치 등) |
장점 | 빠른 필터링, 집계, 정렬 | 텍스트 분석 및 검색 최적화 |
4. 참고
https://esbook.kimjmin.net/06-text-analysis/6.7-stemming/6.7.2-nori
6.7.2 노리 (nori) 한글 형태소 분석기 | Elastic 가이드북
이 문서의 허가되지 않은 무단 복제나 배포 및 출판을 금지합니다. 본 문서의 내용 및 도표 등을 인용하고자 하는 경우 출처를 명시하고 김종민(kimjmin@gmail.com)에게 사용 내용을 알려주시기 바랍
esbook.kimjmin.net