엘라스틱서치 5.x 버전부터 문자열 타입이 텍스트와 키워드라는 두 가지 타입으로 분리되었다.
>> 텍스트 타입
- 일반적으로 문장을 저장
하는 매핑 타입으로 사용한다.
- 텍스트 타입으로 지정된 문자열은 분석기에 의해 토큰으로 분리되고, 이렇게 분리된 토큰들은 인덱싱되는데 이를 역인덱싱이라고 한다.
- 역인덱싱된 용어 중 하나라도 포함되면 도큐먼트를 찾는다.
- 텍스트 타입의 경우 기본적으로 집계나 정렬을 지원하지 않으며, 매핑 파라미터로 집계나 정렬을 지원할 수 는 있으나 메모리를 많이 사용한다는 단점이 있다.
- 텍스트 타입으로 지정된 필드를 정렬할 경우 문장의 첫 문자열이 아닌 분해된 용어를 기준으로 정렬을 수행하므로 예상과는 다른 결과를 얻게 된다.
# text 타입 가진 text_index 인덱스 생성
PUT test_index
{
"mappings": {
"properties": {
"contents" : {
"type": "text"
}
}
}
}
# text_index 인덱스에 도큐먼트 인덱싱
PUT test_index/_doc/1
{
"contents": "a happy dog"
}
# text_index 인덱스 전문 쿼리
GET test_index/_search
{
"query": {
"match": {
"contents": "dog"
}
}
}
>> 키워드 타입
- 카테고리나 사람, 이름, 브랜드 등 규칙성이 있거나 유의미한 값들의 집합, 즉 범주형 데이터에 주로 사용
된다.
- 키워드 타입은 텍스트 타입과 다르게 분석기를 거치지 않고 문자열 전체가 하나의 용어로 인덱싱
된다.
- 키워드 타입은 'a happy dog'라는 1개의 용어를 만든다. 따라서 부분 일치 검색은 어렵지만 대신 완전 일치 검색을 위해 사용할 수 있으며 집계나 정렬에 사용될 수 있음.
# keyword 타입 가진 keyword_index 인덱스 생성
PUT keyword_index
{
"mappings": {
"properties": {
"contents" : {
"type": "keyword"
}
}
}
}
# keyword_index 인덱스에 도큐먼트 인덱싱
PUT keyword_index/_doc/1
{
"contents": "a happy dog"
}
# keyword_index 인덱스 전문 쿼리
GET keyword_index/_search
{
"query": {
"match": {
"contents": "dog"
}
}
}
GET keyword_index/_search
{
"query": {
"match": {
"contents": "a happy dog"
}
}
}
>> 멀티 필드
- 단일 필드 입력에 대해서 여러 하위 필드를 정의하는 기능이다.
- fields라는 매핑 파라미터가 사용된다.
- 사용되는 경우
- 문자열의 경우
전문 검색이 필요하면서 정렬도 필요한 경우
가 있다. - 처음 데이터 스키마를 잡는 시점에서는 키워드 타입으로 충분히 처리가 가능한 범주형 데이터였지만 데이터가 늘어나면서 전문 검색이 필요한 경우가 생긴다.
# 멀티 필드 갖는 multifield_index 인덱스 생성
PUT multifield_index
{
"mappings": {
"properties": {
"contents" : {
"type": "text",
"fields": {
"keyword": {
"type": "keyword"
}
}
}
}
}
}
# keyword 타입 가진 multifield_index 인덱스 생성
PUT multifield_index/_doc/1
{
"contents": "a happy dog"
}
PUT multifield_index/_doc/2
{
"contents": "a happy dog"
}
PUT multifield_index/_doc/3
{
"contents": "a smiley dog"
}
GET multifield_index/_search
{
"query": {
"match": {
"contents": "dog"
}
}
}
GET multifield_index/_search
{
"query": {
"match": {
"contents.keyword": "a happy dog"
}
}
}
아래 책 <엘라스틱 스택 개발부터 운영까지> 3.6.4절을 읽고 정리한 글입니다.
반응형
'데이터베이스 > 엘라스틱서치' 카테고리의 다른 글
elasticsearch. 노리 분석기 [엘라스틱 스택 개발부터 운영까지] (1) | 2023.03.26 |
---|---|
elasticsearch. range query 와 bool query [엘라스틱 스택 개발부터 운영까지] (0) | 2023.03.21 |
elasticsearch. leaf query (match, term, range) [엘라스틱 스택 개발부터 운영까지] (0) | 2023.03.12 |
elasticsearch. 역인덱싱과 분석기 [엘라스틱 스택 개발부터 운영까지] (0) | 2023.02.25 |
elasticsearch. elasticsearch / kibana 설치 (맥 os) (1) | 2023.01.30 |