Elk Stack/Elasticsearch

[Elasticsearch] 텍스트 분석

freedommmm 2021. 8. 6. 18:00

안녕하세요. 오늘은 elasticsearch의 텍스트 분석에 대해서 첫 번째 게시물에서 말씀드렸지만 좀 더 자세히 다뤄보도록 하겠습니다.

 

엘라스틱서치의 데이터 저장 형태

엘라스틱서치는 역 색인(Inverted Index) 구조로 데이터를 저장합니다. RDBMS와 반대이며 텍스트를 다 뜯어서 검색어 사전을 만들어서 테이블 형태로 저장한다고 생각하면 쉽습니다. 이러한 방식을 사용하기 때문에, 데이터 검색 속도가 빠릅니다.

Elasticsearch는 Text Analysis 과정을 통해서 규칙이 있습니다.

  • 대문자 소문자 검색 없이 진행돼야 하기 때문에 모든 영어는 소문자로 만듭니다.
  • Dogs, DOG 등을 dog로 통일시켜서 데이터 사전에 저장됩니다.
  • 문장에서 불필요한 단어를 제거하고, Token으로 만들어줍니다.
Token(Term) Doc Token(Term) Doc
car 1,3 walk 2
dog 1 house 1, 4

 

엘라스틱서치는 위와 같이 데이터를 저장하기 텍스트 분석과정을 거치며 이러한 과정을 애널라이저(Analyzer)라고 불립니다. 해당 과정은 3개의 큰 단계를 거칩니다.

3 단계를 세부적으로 살펴보겠습니다.

1. 캐릭터 필터

  • 0~3개의 캐릭터 필터로 이뤄집니다.
  • 데이터가 입력되었을 때 가장 먼저 만나는 단계이며 일종의 전처리 단계입니다.

1_1 캐릭터 필터 예시

  • html_strip : 저장된 값에 html 태그들을 제거하여 일반 텍스트로 만듭니다.
  • mapping : 지정한 단어를 다른 단어로 치환이 가능합니다. 토크 나이저에 의해서 특수문자가 사라질 것을 대비해 다른 문자로 대체할 수 있다.

 

2. 토크나이저

  • 반드시 1개의 유일한 토크나이저로 이뤄집니다.
  • 검색 기능에서 가장 큰 영향을 미칩니다.
  • 문장에 속한 단어들을 위의 표처럼 token으로 분리할 때 어떠한 규칙으로 분리할지 결정할 수 있습니다.
  • 토크나이저의 기본은 Standard입니다.

2_1 토크나이저 예시

  • Standard : 빈칸을 기준으로 텀을 구분하며, 특수문자를 자동으로 제거하지만, 단어 중간에 있는 특수문자는 제거 안 합니다.
  • Letter : 문자를 제외한 모든 단어를 기준으로 토큰을 분리합니다.
  • Whitespace : 빈칸 및 줄 바꿈 같은 공백을 기준으로 텀을 분리합니다. Standard 토크나이저와 다르게 특수문자도 사라지지 않습니다.
  • uax_url_email : Standard 토크나이저에서는 특수문자를 제거하기 전, 이메일에서도 특수문자가 삭제되어 정상적으로 인식이 안 되는 것을 방지하기 위해서 사용된 토크나이저입니다.
  • Pattern : 공백이 아닌 구분자로 구분하기 위해서 사용하는 토크나이저 입니다.

 

3. 토큰 필터

  • 0 ~ n개의 토큰 필터를 텍스트에 적용할 수 있습니다.
  • 토크나이저를 통해서 분리된 토큰들을 추가적인 제약조건을 통해서 가공하는 과정입니다.
  • 배열 값으로 저장 후 사용해야 합니다.

3_1 토큰 필터 예시

  • Lowercase : 토큰에 있는 모든 단어를 소문자로 만드는 것입니다.
  • Uppercase : 토큰에 있는 모든 단어를 대문자로 만드는 것입니다.
  • Stop : 불필요하게 저장되어 있는 term들을 저장함으로써 속도 향상을 낼 수 있습니다.