개발/엘라스틱서치

elasticsearch. 역인덱싱과 분석기 [엘라스틱 스택 개발부터 운영까지]

ttoance 2023. 2. 25. 23:40

엘라스틱서치는 전문 검색을 지원하기 위해 역인덱싱 기술을 사용한다. 

전문 검색은 장문의 문자열에서 부분 검색을 수행하는 것이며, 역인덱싱은 장문의 문자열을 분석해 작은 단위로 쪼개어 인덱싱하는 기술이다. 

 

역인덱싱을 이용한 전문 검색에서 양질의 결과를 얻기 위해서는 문자열을 나누는 기준이 중요하며, 이를 지원하기 위해 엘라스틱 서치는 캐릭터 필터, 토크나이저, 토큰 필터로 구성되어 있는 분석기 모듈을 갖고 있다. 

- 분석기에는 하나의 토크나이저가 반드시 포함돼야 하며, 캐릭터 필터와 토큰 필터는 옵션이므로 없어도 되고 여러 개를 함께 사용해도 된다. 

 

분석기 구성 

구성요소 설명
캐릭터 필터 입력받은 문자열을 변경하거나 불필요한 문자들을 제거한다
토크나이저 문자열을 토큰으로 분리한다. 분리할 때 토큰의 순서나 시작, 끝 위치도 기록한다. 
토큰 필터  분리된 토큰들의 필터 작업을 한다. 대소문자 구분, 형태소 분석 등의 작업이 가능하다. 

 

 

>> 역인덱싱이란

- 분석기는 문자열을 토큰화하고 이를 인덱싱하는데 이를 역인덱싱이라고 한다. 

- 역인덱싱된 테이블은 용어가 어떤 문서에 속해 있는지 기록되어 있어서 손쉽게 문서를 찾을 수 있다. 

예를 들어, dog을 검색하면 다음 그림에서 역인덱스 테이블을 참고하여 문서 1,2번에 dog이라는 용어가 있음을 찾을 수 있다. 

 

1. 캐릭터 필터 

- 토크나이저 전에 위치하며 문자들을 전처리하는 역할을 한다. 

- html 문법을 제거/변경 하거나 특정 문자가 왔을 때 다른 문자로 대체하는 일을 한다. 

 

2. 토크나이저

- 분석기는 반드시 하나의 토크나이저를 포함해야 하기 때문에 형태가 맞는 토크나이저 선택이 중요하다.

- 공식 문서 링크 : https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-tokenizers.html

토크나이저 설명
standard - 스탠다드 분석기가 사용하는 토크나이저이다. 
- 쉼표(,)나 점(.) 같은 기호 제거하며 텍스트 기반으로 토큰화한다 
lowercase - 텍스트 기반으로 토큰화하며 모든 물자를 소문자로 변경해 토큰화한다. 
ngram - 원문으로부터 N개의 연속된 글자 단위를 모두 토큰화한다. 
- 정밀한 부분 검색에 강점이 있지만, 토크나이징을 수행한 N개 이하의 글자 수로는 검색이 불가능하며 모든 조합을 추출하기 때문에 저장공간을 많이 차지한다는 단점이 있다. 
uax_url_email - 스탠다드 분석기와 비슷하지만 URL이나 이메일을 토큰화하는데 강점이 있다. 

 

 

3. 토큰필터

- 토크나이저에 의해 토큰화되어 있는 문자들에 필터를 적용한다 .

- 토큰들을 변경하거나 삭제하고 추가하는 작업이 가능하다. 

- 공식문서 링크 :  https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-tokenfilters.html

필터 설명
lowercase - 모든 문자를 소문자로 변환한다. 반대로 모든 문자를 대문자로 변환하는 uppercase 필터가 있다. 
stemmer - 영어 문법을 분석하는 필터로 한글의 경우 아리랑, 노리 같은 오픈 소스가 있다. 
stop - 기본 필터에서 제거하지 못하는 특정한 단어를 제거할 수 있다. 

 

4. 분석기 종류 

- 공식문서 링크 : https://www.elastic.co/guide/en/elasticsearch/reference/current/analysis-analyzers.html

분석기 설명
standard - 특별한 설정이 없으면 엘라스틱서치가 기본적으로 사용하는 분석기이다. 
[the, 10, most, loving, dog, breeds]
simple - 문자만 토큰화한다. 
- 공백, 숫자, 하이픈(-)이나 작은 따옴표(')와 같은 문자는 토큰화하지 않는다 
[the, most, loving, dog, breeds]
whitespace - 공백을 기준으로 구분하여 토큰화한다. 
[The, 10, most, loving, dog, breeds]
stop - simple 분석기와 비슷하지만 스톱필터가 포함되어 있다. 
[most, loving, dog, breeds] 

 

>> 분석기 API 

POST _analyze
{
  "analyzer": "stop",
  "text": "The 10 most loving dog breeds"
}

 


아래 책 <엘라스틱 스택 개발부터 운영까지> 3.8절을 읽고 정리한 글입니다.

http://www.yes24.com/Product/Goods/103030516

 

엘라스틱 스택 개발부터 운영까지 - YES24

데이터를 처리하는 데 서로 잘 맞지도 않는 오픈소스 기술들을 굳이 동원해야 할까? 제각각인 오픈소스들을 통합하고 운영하느라 지친 개발자와 운영자들을 위한 솔루션! 이제 엘라스틱 스택

www.yes24.com

 

반응형