-
엘라스틱서치 애널라이저, 토크나이저, 노멀라이저공부하기/엘라스틱서치 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": "나는 최고다" }
char_filter: ["html_strip"] 실습
-> html 특수문자가 파싱 '나는'-> '나는
-> div 태그가 줄바꿈으로 출력
keyword 토크나이저 실습
ngram 토크나이저 실습
-> 공백과 특수문자가 제거된 토큰을 확인할 수 있다.
-> letter에 포함되지 않는 문자를 기준으로 text를 단어 단위로 자르니 "나는", "최고다" 2개의 토큰이 먼저 생성되고,
-> "최고다"에서 "최고", "고다"의 min_gram을 맞춰 다시 쪼개서 위 4개의 토큰을 확인할 수 있는 것으로 추정
edge_ngram 토크나이저 실습
애널라이저 매핑 실습
-> 인덱스의 기본 애널라이저를 keyword 애널라이저로 설정
-> defaultString 필드는 keyword 애널라이저가 적용된다.
-> standardString 필드는 sstandard 애널라이저가 적용된다.
커스텀 애널라이저 매핑 실습
-> 캐릭터 필터를 통해 i관련 문자가 1~4. 로 변경된걸 확인할 수 있습니다.
-> whitespace 토크나이저로 "i.테스트", "ii.테스트2", "iii.테스트3", "iv.테스트4"로 쪼개진걸로 추측해 볼 수 있다.
'공부하기 > 엘라스틱서치' 카테고리의 다른 글
엘라스틱서치 라우팅 (2) 2024.02.13 엘라스틱서치 템플릿 (0) 2024.02.13 엘라스틱서치 text, keyword 타입 (2) 2024.02.12 엘라스틱 서치와 루씬 요약 (2) 2024.02.12 elasticsearch 8.4.2 이론 및 실습 (0) 2024.02.12