Elasticsearch 기본개념 정리 (7) : text와 keyword Type

당연히 ES에서도 RDB와 같이  Text, INT, LONG, DOUBLE ,Boolean 등의 다양한 데이터 타입을 가지고 있다.

그중 가장 중요하게 살펴볼 것은 text와 keyword 타입인데 이것에 대해서 먼저 정리해보도록 한다.

 

1. text type vs keyword type : 무슨차이일까?

text와 keyword 둘다 문자열을 나타내기 위한 타입이지만 서로 다른 목적을 가지고 토큰이 생성된다.

 

1) Keyword Type

 keyword type은 Exact Matching을 위해 토큰이 생성된다.

keyword 타입일때 저장되는 토큰

어떠한 text data를 index에 저장할 때 indexing이 당연히 일어날 것이고

이때 keyword라는 타입으로 저장을 하겠다고 설계했다면 오른쪽과 같이 토큰이 생성된다.

 

반면 텍스트 타입은 어떨까?

 

2) text type

text type은 전문검색(full-text-sarch)을 위해 토큰이 생성되기 때문에 똑같이 "I am a boy"라는 단어를 저장할지라도

생성되는 토큰은 다음과 같다.

보면 keyword type과는 달리 i, am, a, boy 4개의 토큰이 생성된 것을 확인할 수 있다.

그래서 GET search 요청을 통해서 검색을 수행할 때 

keyword type으로 저장되어 있으면 해당 문자와 정확히 일치하는 쿼리를 작성하여 요청해야하는 반면

반면 text type이면 boy 또는 am 등 일부분만 일치하는 쿼리를 작성하여 요청해도 검색이 된다.

 

따라서 text와 keyword로 정의되면 좋은 필드를 정의하면 다음과 같다.

또한 이러한 특성 때문에 keyword 타입이 text보다 색인 속도가 좀 더 빠르다.

 그런데 이때 문자열 필드가 동적 매핑이 된다면 text와 keyword 타입 두개가 모두 생성되기 때문에

문자열의 특성에 따라서 text와 keyword를 정적매핑을 해주어야지 성능에 도움이 된다.