ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • ES - 텍스트 분석
    🔍 elastic search 2022. 9. 22. 13:53

    역색인 구조


    Elasticsearch는 역색인 구조를 사용해 데이터를 빠르게 검색할 수 있다.

    • 각 문서의 text를 term으로 분할하고, term 들을 도큐먼트와 매핑
    • 특정 키워드(term)로 포함하고 있는 문서들에 대한 Primary Key를 맵핑하는 인덱스 테이블 생성

    인덱스 테이블을 활용하여 빠른 문서 탐색이 가능하다.

    • 주로 BTree, Trie, Hash Table 등의 자료구조를 활용하여 구현

    단점

    • 영어의 경우 대소문자를 다른 텍스트로 인지한다.
    • 복수형과 단수형이 동일하게 검색되지 않는다.
    • jump, leap는 같은 의미지만 다른 텍스트로 인지

    → 텍스트 분석을 통해 해결

    텍스트 분석


    Elasticsearch는 문자열 필드가 저장될 때 데이터에서 검색어 토큰을 저장하기 위해 여러 단계의 처리 과정을 거침.

    • 이를 텍스트 분석(Text Analysis)라고 한다.
    • 이 과정을 처리하는 기능을 애널라이저(Analyzer)라고 한다.

    애널라이저는 0-3개의 캐릭터 필터(Character Filter) 와 1개의 토크나이저(Tokenizer), 그리고 0~n개의 토큰 필터(Token Filter)로 이루어진다.

    캐릭터 필터

    • 텍스트 데이터가 입력되면 가장 먼저 필요에 따라 전체 문장에서 특정 문자를 대치하거나 제거한다.
    • 이 과정을 담당하는 기능
    • 텍스트가 term으로 분리되기 전 전처리 하는 역할

    ES 에는 총 3가지의 캐릭터 필터 존재

    1. HTML Strip Character Filter
    2. Mapping Character Filter
    3. Pattern Replace Character Filter

    HTML Strip Character Filter

    • HTML 태그를 제거하는 Filter
    • <> 로 된 태그를 제거할 뿐 아니라 &nbsp; 같은 태그도 함께 제거한다.

    Mapping Character Filter

    • 지정한 단어를 다른 단어로 치환할 수 있는 Filter

    Pattern Replace Character Filter

    • 정규식(Regular Expression)을 이용해 좀 더 복잡한 패턴들을 치환

    토크나이저

    • 문장에 속한 단어들을 term 단위로 하나씩 분리해내는 처리 과정을 담당
    • 데이터 색인 과정에서 검색 기능에 가장 큰 영향을 미치는 단계

    토크 나이저는 반드시 1개만 적용이 가능하다.

    크게 3가지로 나눌 수 있다.

    1. 단어 지향 토크나이저
      • 일반적으로 전체 텍스트를 개별 단어로 토큰화 하는데 사용
      • ex) standard, letter, lowercase 등
    2. 부분 단어 토크나이저
      • 부분적인 단어 일치를 위해 텍스트 또는 단어를 작은 조각으로 나눔
      • ex) N-Gram, Edge N-Gram 등
    3. 구조화된 텍스트 토크나이저
      • 보통 전체 텍스트보다는 식별자, 이메일 주소, 우편번호 및 경로와 같은 구조화된 텍스트와 함께 사용
      • ex) Keyword, Pattern, Simple Pattern 등

    단어 지향 토크 나이저

    Standard

    • 공백으로 term을 구분하면서 “@” 과 같은 일부 특수문자를 제거
    • “jumped!”, “jumped.” 의 느낌표, 마침표 처럼 단어 끝에 있는 특수문자는 제거
    • “3.5”, “ko.beom_seok” 처럼 중간에 있는 마침표나 밑줄 등은 제거되거나 분리되지 않는다.

    Letter

    • 알파벳을 제외한 모든 공백, 숫자, 기호들을 기준으로 텀을 분리한다.
    • “ko.beom_seok” 같은 단어도 “ko”, “beom”, “seok” 처럼 모두 분리된다.

    Whitespace

    • 스페이스, 탭 그리고 줄바꿈 같은 공백만을 기준으로 term을 구분한다.
    • 특수문자, 마지막의 마침표 등도 사라지지 않고 그대로 남아있다.

    Letter는 검색범위가 넓어져 너무 많은 결과가 나올 수 있다.

    Whitespace는 특수문자를 거르지 않아 정확하게 검색을 하지 않으면 검색결과가 나오지 않는다.

    따라서 보통 standard를 많이 사용한다.

     

    종류 예시  예시 : ko.beom_seok @ jumped! 3.5 yes.
    Standard ko.beom_seok / jumped / 3.5 / yes
    Letter ko / beom / seok / jumped/ yes
    Whitespace ko.beom_seok / @ / jumped! / 3.5 / yes.

    Letter 토크나이저의 경우 검색 범위가 넓어져서 원하지 않는 결과가 많이 나올 수 있고,

    Whitespace 의 경우 특수문자를 거르지 않기 떄문에 정확하게 검색을 하지 않는 이상 검색 결과가 나오지 않을 수도 있다.

    보통은 Standard 토크나이저를 많이 사용합니다

    부분 단어 토크나이저

    Ngram

    • 기본적으로 한 글자씩 토큰화
    • 다양한 옵션을 조합해서 사용할 수 있다. ⇒ 자동완성 시에 유용

    Edge Ngram

    • 지정된 문자의 목록 중 하나를 만날 때마다 시작 부분을 고정시켜 단어를 자르는 방식으로 사용

    Ngram - 시작하는 문자가 정해져 있지 않다.

    Edge Ngram - 시작부분을 고정시킬 수 있다.

    구조화된 텍스트 토크나이저

    Keyword

    • 전체 텍스트를 하나의 토큰으로 만든다.
    • 여러 토큰으로 나누지 ❌, 단일 용어와 정확히 동일한 텍스트를 출력
    • 토큰 필터와 결합해 출력을 정규화 할 수 있다.

    Pattern

    • 분리할 패턴을 기호 또는 정규식 형태로 지정할 수 있다.
    • 정규식을 사용하여 단어 구분 기호와 일치할 때마다 텍스트를 용어로 분할하거나 일치하는 텍스트를 용어로 캡처

    토큰 필터

    • 분리된 term 들을 하나씩 가공하는 과정을 담당
    • 토크나이저에서 분리된 토큰들을 변형하거나 추가, 삭제 할 때 사용
    • 독립적으로 사용할 수 없다. (토크나이저에서 토큰이 분리되어야 사용 가능)

    토큰 필터는 0개 부터 여러 개를 적용할 수 있다.

     

    Lowercase

    • 거의 모든 텍스트 검색 사례에서 사용되는 토큰 필터
    • term들을 모두 소문자로 변경하여 저장하는 역할

    Uppercase

    • 모든 term들을 대문자로 변경하는 것

    Stop Token Filter

    • 불용어 (stopword, 검색에서 의미가 없는 조사나 전치사 같이 검색어로 쓰이지 않는 단어)에 해당하는 term을 제거
    • 인덱스로 만들고 싶지 않거나 검색되지 않게 하고 싶은 단어를 등록해 불용어 사전을 구축

    Synonym Token Filter

    • 동의어를 처리할 수 있는 필터
    • Ex) “AWS” 검색시 “Amazon” 또는 한글 “아마존”도 같이 검색을 하도록 한다.

    동의어를 설정하는 옵션

    • synonyms : 직접 동의어 목록을 입력
    • synonyms_path : 동의어 사전 파일을 만들어 설정

    애널라이저

    _analyze API

    • Elasticsearch에서는 분석된 문장을 _analyze API를 이용해 확인할 수 있다.
      • 어떻게 term으로 분리될지 미리 확인 가능

    ex : snowball 애널라이저

    • whitespace 토크나이저
    • lowercase, stop, snowball 토큰필터 사용
    • “jumping” 을 snowball 애널라이저를 거쳐 실제 검색 → jump로 검색한다.

    사용자 정의 애널라이저

    • 실제로 인덱스에 저장되는 데이터의 처리에 대한 설정은 애널라이즈만 적용할 수 있다.
    • 매핑에 아무 설정을 하지 않은 경우 디폴트로 적용되는 애널라이저는 standard 애널라이저 이다.
    • 사용자가 만든 인덱스에 애널라이저를 설정하고 싶으면 인덱스를 만들 때 설정해주면 된다.

    참고자료

    https://esbook.kimjmin.net/06-text-analysis

    https://velog.io/@soyeon207/ES-6.-ES-분석기

    '🔍 elastic search' 카테고리의 다른 글

    Elasticsearch + Springboot  (0) 2022.09.27
    ES - Aggregations  (0) 2022.09.22
    ES - 데이터 검색  (1) 2022.09.21
    ES - 기본 API  (0) 2022.09.21
    Docker로 ES 설치하기  (1) 2022.09.21

    댓글

Designed by Tistory.