본문 바로가기

Backend Study/ELK Stack

3.4 엘라스틱서치 분석기

3.4.1 텍스트 분석 개요

 

POST _analyze
{
"analyzer" : "standard",
"text" : "우리나라가 좋은나라, 대한민국 화이팅"
}

-> 결과로 우리나라 / 좋은나라 / 대한민국 / 화이팅 따로 나옴

 

3.4.2 역색인 구조

- 모든 문서가 가지는 단어의 고유 단어 목록

- 해당 단어가 어떤 문서에 속해있는지에 대한 정보

- 전체 문서에 각 단어가 몇 개 들어있는지에 대한 정보

- 하나의 문서에 단어가 몇 번씩 출현했는지에 대한 정보

 

* 색인한다는 것은 역색인 파일을 만든다는 것이다. 원문이 변경되는 것이 아니라 색인 파일에 들어갈 토큰만 변경되어 저장되고 실제 문서 내용은 변함없이 저장된다. 색인할 때 특정한 규칙과 흐름에 의해 텍스트를 변경하는 과정을 분석(analyze)라고 하고 해당 처리는 분석기 (analyzer)라는 모듈을 조합해서 이뤄진다.

 

3.4.2 분석기의 구조

1. 문장을 특정한 규칙에 의해 수정한다.

2. 수정한 문장을 개별 토큰으로 분리한다.

3. 개별 토큰을 특정한 규칙에 의해 변경한다.

 

PUT /movie_analyzer
{
"settings": {
"index": {
	"number_of_shards" : 5,
    "number_of_replicas" : 1
    }
},
"analysis":{
"analyzer":{
	"custom_movie_analyzer":{
    	"type":"custom",
        "char_filter":[
        	"html_strip"
        ],
        "tokenizer" : "standard",
        "filter": [
        	"lowercase"
        ]
    	}
	}
}
}

 

3.4.3.1 분석기 사용법

엘라스틱서치는 루씬에서 존재하는 기본 분석기를 별도의 정의 없이 사용할 수 있게 미리 정의해서 제공한다.

 

분석기를 이용한 분석

 

POST _analyze
{
	"analyzer" : "standard",
    "text": "캐리비안의 해적"
}

필드를 이용한 분석

POST movie_analyzer/_analyzer
{
	"field":"title",
    "text":"캐리비안의 해적"
}

색인과 검색 시 분석기를 각각 설정

3.4.3.2  대표적인 분석기

Standard Analyzer

analyzer를 정의하지 않고 필드의 데이터 타입을 TEXT 데이터 타입으로 사용한다면 기본적으로 standard analyzer를 사용한다.

공백 혹은 특수 기호를 기준으로 토큰을 분리하고 모든 문자를 소문자로 변경하는 토큰 필터를 사용한다.

 

옵션: 

max_token_length: 최대 토큰 길이를 초과하는 토큰이 보일 경우 해당 length 간격으로 분할한다. 기본값은 255자

stopwords: 사전 정의된 불용어 사전을 사용한다. 기본값은 사용하지 않는다.

stopwords_path: 불용어가 포함된 파일을 사용할 경우의 서버의 경로로 사용한다.

 

POST movie_analyzer/_analyze
{
	"analyzer":"standard",
    "text":"Harry Potter and the Chamber of Secrets"
}

결과

[harry, potter, and, the, chamber, of, secrets]

 

Whitespace 분석기

공백 문자열을 기준으로 토큰을 분리한다.

 

keyword 분석기

전체 입력 문자열을 하나의 키워드처럼 처리한다. 토큰화 작업을 하지 않는다.

 

3.4.4  전처리 필터

엘라스틱서치에서 제공하는 분석기는 전처리 필터릴 이용한 데이터 정제 후 토크나이저를 이용해 본격적인 토큰 분리 작업을 수행한다. 그런 다음 토큰 리스트를 토큰 필터를 통ㅌ해 재가공하는 3단계 방식으로 동작한다.

 

전처리필터는 활용도가 그리 높지 않다.

Html strip char 필터

파라미터: escaped_tags: 특정 태그만 삭제한다. 기본값으로 HTML 태그를 전부 삭제한다.

: 기본적으로 모든 HTML 태그가 삭제되지만, 이를 사용해서 선택할 수 있다.

 

3.4.5  토크나이저 필터

전처리 필터를 거쳐 토크나이저 필터로 문서가 넘어오면 해당 텍스트는 토크나이저 특성에 맞게 적절히 분해된다.

 

Standard 토크나이저

기호를 만나면 토큰으로 나눈다.

 

WHITESPACE TOKENIZER

공백을 만나면 텍스트를 토큰화한다.

 

NGRAM 토크나이저

한 글자씩 토큰화한다.

 

 

 

3.4.6 토큰 필터

토크나이저에서 분리된 토큰들을 변형하거나 추가, 삭제할 때 사용하는 필터이다.

토크나이저에 의해 토큰이 모두 분리되면 분리된 토큰은 배열 형태로 토큰 필터로 전달된다. 토큰이 분리된 후 동작하기 때문에 독립적으로 사용할 수 없다. 

Ascii Folding, Lowercase, Uppercase 등 

 

3.4.6  동의어 사전

동의어 검색 기능이란? 원문에 특정 단어가 존재하지 않더라도 색인 데이터를 토큰화해서 저장할 때 동의어나 유의어에 해당하는 단어를 함께 저장해서 검색이 가능해지게 하는 기술이다.

 

두가지 방식이 있다.

1. 동의어를 매핑 설정 정보에 미리 파라미터로 등록한다.

2. 특정 파일을 별도로 생성해서 관리한다.

 

동의어 사전 만들기 

동의어 파일은 엘라스틱서치가 설치된 서버 아래의 config 디렉터리에 생성해야한다.

<엘라스틱서치 설치 디렉터리>/config/analysis/synonym.txt

 

이후 작업은 2가지이다.

1) 동의어 추가

단어를 쉼표(,)로 분리해 등록한다.

ex. Elasticsearch, 엘라스틱서치

 

2) 동의어 치환

특정 단어를 어떤 단어로 변경하고싶을 때 사용. 원본 토큰이 제거되고 변경될 새로울 토큰이 추가된다.

ex. Harry => 해리

 

출처 - 엘라스틱서치 실무 가이드

'Backend Study > ELK Stack' 카테고리의 다른 글

엘라스틱서치 키바나로 스냅샷 생성하기  (0) 2023.01.24
4. 데이터 검색  (0) 2023.01.24
3. 데이터 모델링  (0) 2023.01.22
02. 엘라스틱서치 살펴보기  (0) 2023.01.12
검색 시스템 이해하기  (0) 2023.01.08