시뻘건 개발 도전기

데이터 모델링: 전처리 필터 본문

Reading/엘라스틱서치 실무 가이드

데이터 모델링: 전처리 필터

시뻘건볼때기 2023. 12. 13. 21:36
반응형

분석기는 전처리 필터를 이용한 데이터 정제후 토크나이저를 이용해 본격적인 토큰 분리 작업을 한다. 그 다음 생성된 토큰 리스트를 토큰 필터를 통해 재가공하는 3단계 방식으로 동작한다. 하지만 토크나이저 내부에서도 일종의 전처리가 가능하기 때문에 전처리 필터는 상대적으로 활용도가 많이 떨어진다. 그렇기 때문에 엘라스틱서치에서 공식적으로 많은 종류의 전처리 필터를 제공하지 않는다. 이 가운데 HTML 문서의 전처리를 위해 제공하는 전처리 필터를 알아보자.

 

HTML strip char filter

문장에서 HTML을 제거하는 전처리 필터이며 필터 옵션은 아래와 같다.

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

 

Tokenizer Filter

전처리 필터를 거쳐 토크나이저 필터로 문서가 넘어오면 해당 텍스트는 Tokenizer의 특성에 맞게 적절히 분해된다. 분석기에서 어떠한 토크나이저를 사용하느냐에 따라 분석기의 전체적인 성격이 결정된다.

 

Standard Tokenizer

엘라스틱서치에서 일반적으로 사용하는 토크나이저로서 대부분 기호를 만나면 토큰을 나눈다. 옵션은 아래와 같다.

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

 

Whitespace Tokenizer

공백을 만나면 텍스트를 토큰화하며 옵션은 아래와 같다.

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

 

Ngram Tokenizer

한 글자씩 토큰화한다. Ngram에 특정 문자를 지정할 수도 있으며 지정된 문자의 목록 중 하나를 만날 때마다 단어를 자른다. 그 밖에 자동완성을 만들 때 유용하게 활용할 수도 있다. 옵션은 아래와 같다.

min_gram Ngram을 적용할 문자의 최소 길이를 나타낸다. 기본 값은 1
max_gram Ngram을 적용할 문자의 최대 길이를 나타낸다. 기본 값은 2
token_chars 토큰에 포함할 문자열을 지정한다. 다음과 같은 옵션을 제공한다.
- letter: 문자
- digit: 숫자
- whitespace: 공백
- punctuation: 구두점
- symbol: 특수기호

 

Edge Ngram Tokenizer

지정된 문자의 목록 중 하나를 만날 때마다 시작 부분을 고정시켜 단어를 자르는 방식이다. 자동완성을 구현할 때 유용하다. 옵션은 아래와 같다.

min_gram Ngram을 적용할 문자의 최소 길이를 나타낸다. 기본 값은 1
max_gram Ngram을 적용할 문자의 최대 길이를 나타낸다. 기본 값은 2
token_chars 토큰에 포함할 문자열을 지정한다. 다음과 같은 옵션을 제공한다.
- letter: 문자
- digit: 숫자
- whitespace: 공백
- punctuation: 구두점
- symbol: 특수기호

 

Keyword Tokenizer

텍스트를 하나의 토큰으로 만든다. 옵션은 아래와 같다.

buffer_size 텀을 버퍼로 읽어 들일 문자 수를 지정한다. 기본 값은 256

 

 

토큰 필터

토크나이저에서 분리된 토큰들을 변형하거나 추가, 삭제할 때 사용하는 필터다. 토크나이저에 의해 토큰이 분리되면 분리된 토큰은 배열 형태로 토큰 필터로 전달된다. 토큰이 모두 분리되어야 동작하기 때문에 독립적으로는 사용할 수 없다.

 

동의어 사전

토크나이저에 의해 토큰이 모두 분리되면 다양한 토큰 필터를 적용해 토큰을 가공할 수 있다. Synonym Filter를 사용하면 동의어 처리가 가능해진다. 동의어는 검색 기능을 풍부하게 할 수 있게 도와주는 도구 중 하나다. 원문에 특정 단어가 존재하지 않더라도 색인 데이터를 토큰화해서 저장할 때 동의어나 유의어에 해당하는 단어를 함께 저장해서 검색이 가능해지게 하는 기술이다. (google 검색할 때 "elasticsearch"라고 검색해도 "엘라스틱서치"도 검색되는 기능) 동의어를 추가하는 방식은 첫 번째, 동의어를 맵핑 설정 정보에 미리 파라미터로 등록하는 방식이고 두 번째는 특정 파일을 별도로 생성해서 관리하는 방식이다. 검색엔진에서 다루는 분야가 많아질수록 동의어의 수도 늘어나므로 관리하기 쉽지 않다. 실무에서는 동의어를 모아둔 파일들을 칭할 때 "동의어 사전"이라고 부른다.

수정된 동의어를 적용하고 싶다면 해당 동의어 사전을 사용하고 있는 인덱스를 Reload해야한다. 그렇기 때문에 동의어 사전은 실시간으로 적용되지 않는다. 동의어 사전은 색인 시점에도 사용될 수 있고 검색 시점에도 사용될 수 있는 점에 주의하자. 검색 시점에는 사전의 내용이 변경되더라도 해당 내용이 반영된다. 하지만 색인 시점에 동의어 사전이 사용되었다면 사전의 내용이 변경되더라도 색인이 변경되지 않는다.

 

동의어 사전 만들기

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

 

동의어 추가

동의어를 추가할 때 단어를 쉼표로 분리해 등록하는 방법이다. 예를들어 "Elasticsearch"와 "엘라스틱서치"를 동의어로 지정하고 싶다면 "Elasticsearch, 엘라스틱서치"라고 입력한다. 동의어 처리 기준은 앞서 동작한 토큰 필터의 종류가 무엇이고 어떤 작업을 했느냐에 따라 달라질 수 있다는 점에 주의해야한다.

최신 버전의 엘라스틱서치에서는 동의어를 처리할 때 영문 대소문자가 사전에 등록된 단어와 일치하지 않더라도 자동으로 인식해서 동의어 처리를한다.

 

동의어 치환하기

특정 단어를 어떤 단어로 변경하고 싶다면 동의어 치환 기능을 이용하면 된다. 동의어를 치환하면 원본 토큰이 제거되고 변경될 새로운 토큰이 추가된다. 이는 화살표 (=>)로 표시한다. 예를 들어 "Hatty=>해리"라고 하면 Harry를 해리로 변경해서 색인하겠다는 의미다.

 

반응형
Comments