Elasticsearch

ELK 정복하기 - 애널라이저(분석기)

ri5 2023. 8. 20. 16:27

매핑이란?

애널라이저를 알기전에 가장 먼저 알아야 하는 것은 매핑이다. 매핑을 데이터 베이스와 비교하자면 테이블을 정의한 스키마와 비슷하다고 볼 수 있다. 인덱스의 필드와 타입을 정의하여 활용할 수 있습니다. 

 

예시

curl -XPUT 127.0.0.1:9200/movies -d {
	"mappings": {
    	"properties": {
        	"year": {"type": "date"}
        }
    }
}

Elasticsearch는 기본적으로 REST API를 통해 통신을 하기 때문에 curl을 활용하여 인덱스를 정의했다. movies라는 인덱스를 생성하고 인덱스안에서는 year라는 필드가 존재하고 date타입인 것을 확인할 수 있다. 그외에도 인덱스는 아래와 같이 활용할 수 있다.

 

필드 타입 정의

엘라스틱은 date타입 말고도 boolean, text, keyword,  long, short, date 등 다양한 형태를 제공합니다. 

{
	"properties": {
		"user_id": {"type":"long"}
        }
}

 

필드 인덱스 정의

타입 뿐만 아니라 analyze 처리 여부를 설정할 수 있다. 예를 들어 "PENDING", "PAID"등과 같이 enum형태로 관리되는 데이터는 굳이 full-text 검색 대상을 지원할 필요가 없기 때문이다. 

"properties" {
	"genre": {
    	"index": "not_analyzed"
    }
}
  • analyzed: analyzer를 활용하여 tokenized를 처리하여 수행하도록 설정합니다.
  • not-analyzed: analyzer를 활용하지 않지만 검색을 가능하도록 색인화는 하도록 합니다.
  • no: 색인화도 하지 않고 analyzed도 하지 않습니다.

* 토큰화(tokenized): 공백, 특수문자, 구두점 등으로 문자열을 단어 단위로 분할하는 것을 의미합니다. 그외에도 모든 문자를 소문자화 하거나 동의어나 어간등을 작업할 수 있는 토큰 필터를 사용할 수도 있다. 

 

분석기(analyzer)의 기능

  • 문자열 필터(Chracter Filter): Html의 인코딩을 제거하거나 &와 같은 특수문자들을 단어로 변환하는 등의 역활을 할 수 있다. 예를 들어 네이버가 블로그 정보를 스크래핑할 때 블로그 제목이나 내용 등 필요한 정보만 저장할 수 있습니다. 그리고 &나 $와 같은 특수문자를 단어로 변환하면서 달러를 검색했을 때 도큐먼트가 검색되도록 할 수 있다.
  • 토큰화(Tokenized): 긴 문자열을 작은 문자 단위로 분할합니다. 어떤 기준으로 분리할지는 어떤 토크나이저에 따라 달라진다. 
  • 토큰 필터(Token Filter): 토큰 필터는 토큰화된 문자들을 처리하는 필터로 어간 추출, 소문자화, 불용어 제거 등을 처리할 수 있다.

분석기 선택

  • 표준(standard): 유니코드 텍스트 세그멘테이션 알고리즘을 통해 글자를 분리하고 하고 쉼표(,), 느낌표(!), 물음표(?)와 같은 문장 부호를 제거합니다. 그리고 모든 문자열을 소문자로 변형하며 불용어를 제거할 수 있습니다. 
  • 단순(Simple): 표준과 차이는 글자를 분리하는 방법과 필터를 하는 방법에 대해 가장 큰 차이점이 있다. 단순 분석기는 표준과 다르게 단순은 공백으로 글자를 분리하고 필터는 불용어를 제거해주는 stop필터를 사용하지 않고 소문자로 바꿔주는 lower 필터를 사용한다.
  • 공백(whitespace): 단순 분석기보다 더 심플한 구조로 되어 있다. 소문자로 바꿔주는 필터도 사용하지 않는다. 
  • 언어(Languate): 모든 언어가 영어로 되어 있지 않기 때문에 각 언어를 분석할 수 있는 분석기가 필요하다. 한국은 현재 일본의 형태소 분석기를 기반으로 노리라는 형태소 분석기가 존재하고 있다.