이번 글에서는 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

 

반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기