ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 엘라스틱서치 애널라이저, 토크나이저, 노멀라이저
    공부하기/엘라스틱서치 2024. 2. 13. 00:42

    애널라이저

    • text 타입의 필드 데이터는 애널라이저를 통해 분석
    • (0개 이상의 캐릭터 필터 + 1개 토크나이저 + 0개 이상의 토큰 필터)로 구성
    • standard 애널라이저 (기본값) : standard 토크나이저와 lowercase 토큰 필터로 구성
    • simple 애널라이저 : letter가 아닌 문자 단위로 토큰을 쪼개고 lowercase 토큰 필터가 적용
    • whitespace 애널라이저 : whitespace 토크나이저로 구성, 공백 문자 단위로 토큰을 쪼갠다.
    • keyword 애널라이저 : keyword 토크나이저로 구성, 별다른 분석을 실시하지 않고 하나의 큰 토큰을 반환한다.
    • pattern 애널라이저 : pattern 토크나이저와 lowercase 토큰 필터로 구성
    • language 애널라이저 : 여러 언어의 분석을 지원
    • fingerprint 애널라이저
    • stop 애널라이저

    플러그인 설치를 통한 애널라이저 추가

    bin/elasticsearch-plugin install 플러그인이름

     

     

    캐릭터 필터

    • 텍스트를 스트림으로 받아 특정한 문자를 추가, 변경, 삭제한다.
    • 여러 캐릭터 필터가 설정된 경우 순서대로 수행된다.
    • HTML_strip 캐릭터 필터 : html 문서 태그의 content 데이터를 꺼낸다. html에서 사용하는 특수 문자도 디코딩한다.
    • mapping 캐릭터 필터 : 치환할 대상이 되는 문자와 치환 문자를 맵 형태로 선언한다.
    • pattern replace 캐릭터 필터 : 정규 표현식을 이용해서 문자를 치환한다.

    토크나이저

     

    * token_chars 속성

    - letter : 언어의 글자로 분류되는 문자

    - digit : 숫자로 분류되는 문자

    - whitespace : 띄어쓰기나 줄바꿈 문자 등 공백으로 인식되는 문자

    - custom: custom_token_chars 설정을 통해 따로 지정한 커스텀 문자

    - punctuation

    - symbol

    • 캐릭터 스트림을 받아서 여러 토큰으로 쪼개어 토큰 스트림을 만든다.
    • 하나의 토크나이저만 지정할 수 있다.
    • standard 토크나이저 (기본값) : 텍스트를 단어 단위로 나눈다. 
    • keyword 토크나이저 : 들어온 텍스트를 쪼개지 않고 그대로 내보낸다. ( 단일 토큰 )
    • ngram 토크나이저 
      • 텍스트를 min_gram값 이상, max_gram값 이하로 쪼갠다.
      • token_chars 속성을 지정하여 토큰에 포함시킬 텍스트값을 지정 또는 제외할 수 있다.
      • token_chars 속성을 지정하지 않으면 모든 문자를 허용한다.
      • token_chars에 지정되지 않은 문자를 기준으로 텍스트를 단어 단위로 쪼갠다.
      • RDB의 LIKE 검색과 유사한 동작을 원할때 주로 활용
      • min_gram과 max_gram의 차가 1 이상일 경우 분석 시도가 실패
    • edge_ngram 토크나이저
      • 입력된 text를 token_chars에 지정되지 않은 문자를 단어 단위로 쪼갠다.
      • min_gram 이상, max_gram 이하의 문자 길이를 가진 토큰으로 쪼갠다.
      • 생성된 모든 토큰의 시작 글자를 단어의 시작 글자로 고정시켜서 생성한다. -> ngram 토크나이저와의 차이점
    • letter 토크나이저 : 공백, 특수문자 등 언어의 글자로 분류되는 문자가 아닌 문자를 만났을 때 쪼갠다.
    • whitespace 토크나이저 : 공백 문자를 만났을 때 쪼갠다.
    • pattern 토크나이저 : 지정한 정규표현식을 단어의 구분자로 사용하여 쪼갠다.

    토큰 필터

    • 토큰 스트림을 받아서 토큰을 추가, 변경, 삭제한다.
    • 토큰 필터가 여러개 적용된 경우 순차적으로 적용된다.
    • lowercase 토큰필터 : 토큰의 내용을 소문자로 만들어준다.
    • uppercase 토큰필터 : 토큰의 내용을 대문자로 만들어준다.
    • synonym 토큰필터 : 유의어 사전 파일을 지정하여 지정된 유의어를 치환한다.
    • pattern_replace 토큰필터 : 정규식을 사용하여 토큰의 내용을 치환한다.
    • stermmer 토큰필터 : 지원되는 언어의 어간 추출을 수행한다.
    • trim 토큰필터 : 토큰의 전후에 위치한 공백 문자를 제거한다.
    • truncate 토큰필터 : 지정한 길이로 토큰을 자른다.

    노멀라이저

    • 적용 대상은 keyword 타입의 필드
    • 단일 토큰을 생성한다.
    • 캐릭터필터, 토큰 필터로 구성된다.
    • 글자 단위로 작업을 수행하는 필터만 사용할 수 있다.
    • keyword 타입에 어떠한 설정도 하지 않으면 어떠한 노멀라이저도 적용되지 않는다.

     


     

    애널라이저 요청 문법

    GET _analyze
    POST _analyze

     

     

    analyzer: standard 실습

    POST _analyze
    {
    	"analyzer": "standard",
        "text": "나는 최고다"
    }

    2개의 토큰생성


    char_filter: ["html_strip"] 실습

    -> html 특수문자가 파싱  '나는'-> '나는

    -> div 태그가 줄바꿈으로 출력

     


     

    keyword 토크나이저 실습

     

    하나의 단일 토큰으로 응답

     


     

    ngram 토크나이저 실습

    2글자와3글자로 나뉜 토큰들

    -> 공백과 특수문자가 제거된 토큰을 확인할 수 있다.

    -> letter에 포함되지 않는 문자를 기준으로 text를 단어 단위로 자르니 "나는", "최고다" 2개의 토큰이 먼저 생성되고,

    -> "최고다"에서 "최고", "고다"의 min_gram을 맞춰 다시 쪼개서 위 4개의 토큰을 확인할 수 있는 것으로 추정

     


     

    edge_ngram 토크나이저 실습

    쪼개진 단어의 첫 글자가 포함되어 있는걸 확인할 수 있음

     


     

    애널라이저 매핑 실습 

    테스트 인덱스 생성

    -> 인덱스의 기본 애널라이저를 keyword 애널라이저로 설정

    -> defaultString 필드는 keyword 애널라이저가 적용된다.

    -> standardString 필드는 sstandard 애널라이저가 적용된다.

     


    

    커스텀 애널라이저 매핑 실습 

    엘라스틱서치 바이블 88페이지 예제를 그대로 사용했습니다.
    커스텀 애널라이저 적용 결과

    -> 캐릭터 필터를 통해 i관련 문자가 1~4. 로 변경된걸 확인할 수 있습니다.

    -> whitespace 토크나이저로 "i.테스트", "ii.테스트2", "iii.테스트3", "iv.테스트4"로 쪼개진걸로 추측해 볼 수 있다.

Designed by Tistory.