티스토리 뷰
elasticsearch에서 한글검색을 잘 사용하기 위해 한글 플러그인을 설치해봅시다
https://www.elastic.co/kr/blog/nori-the-official-elasticsearch-plugin-for-korean-language-analysis
노리를 공식 플러그인으로 지원하고 있습니다
지난 포스팅에서의 elasticsearch설치를 무사히 마치셨나요?
https://trend21c.tistory.com/2219
그렇다면 아래의 명령어를 입력하여 노리 플러그인 설치를 완료합니다
설치가 매우 쉽습니다
elasticsearch-plugin install analysis-nori
그리고 elasticsearch를 재실행해주세요
일단 설치는 하긴 했는데 노리 플러그인은 도대체 무슨일을 하는걸까요?
우리가 설치한 플러그인이 nori analyzer라고 하는거거든요
일단 elasticsearch에서 말하는 analyzer가 뭔지 알아볼께요
analyzer는
0개 또는 그 이상의 캐릭터필터(Character filter)
1개의 토크나이저(tokenizer)
0개 또는 그 이상의 토큰필터(token filter)
이렇게 구성이 되어있어요
캐릭터 필터는 입력받은 텍스트를 가공하는 필터인데
예를 들면 입력받은 텍스트에서 html 태그를 삭제한다던가 글자를 치환한다던가 토큰화 하기 이전의 텍스트 변환을 수행하고
토크나이저는
입력받은 텍스트를 검색을 위한 형태로 토큰화 합니다(독립적인 단어들로 쪼갠다고 보시면 됩니다)
그리고 토큰필터는
토큰화된 단어들에서 필요없는것은 빼고, 특정 단어를 변환시키고 이런것들을 한답니다
예를 들면 lowercase라는 토큰필터는 토큰화된 단어를 소문자화 시킨답니다
그럼 다시 노리 analyzer를 살펴볼게요
https://www.elastic.co/guide/en/elasticsearch/plugins/current/analysis-nori-analyzer.html
노리플러그인에 대해서 자세한 설명이 나와있는페이지 입니다
nori analyzer는 다음과 같은 구성으로 이루어져있습니다
- nori_tokenizer
- nori_part_of_speech 토큰 필터
- nori_readingform 토큰필터
- lowercase 토큰 필터
그러니깐 1개의 토크나이저와 3개의 토큰필터로 구성된것이 nori analyzer입니다
nori 토크나이저가 어떻게 동작하는지 살펴볼까요?
"아버지가 방에 들어가신다" 라는 문장이 nori 토크나이저를 통하면 어떻게 분석되는지 테스트해봅시다
_analyze API를 통해 직접 토크나이저를 지정해서 어떤 결과가 나오는지 볼거예요
기본토큰(standard)
POST http://localhost:9200/_analyze
body
{
"tokenizer": "standard",
"text": [
"아버지가 방에 들어가신다"
]
}
response
{
"tokens": [
{
"token": "아버지가",
"start_offset": 0,
"end_offset": 4,
"type": "<HANGUL>",
"position": 0
},
{
"token": "방에",
"start_offset": 5,
"end_offset": 7,
"type": "<HANGUL>",
"position": 1
},
{
"token": "들어가신다",
"start_offset": 8,
"end_offset": 13,
"type": "<HANGUL>",
"position": 2
}
]
}
단순하게 띄어쓰기 단위로 텍스트가 토큰화되었습니다
이문장에서 검색을 위한 단어는 "아버지" 또는 "방"이어야 하는데 정확히 이 단어를 인지하지 못했네요
이런상황에서는 "아버지"로 검색이 되지 않고, "아버지가" 라고 검색해야 원하는 결과를 받을수 있게될거예요
노리 토크나이저
body
{
"tokenizer": "nori_tokenizer",
"text": [
"아버지가 방에 들어가신다"
]
}
response
{
"tokens": [
{
"token": "아버지",
"start_offset": 0,
"end_offset": 3,
"type": "word",
"position": 0
},
{
"token": "가",
"start_offset": 3,
"end_offset": 4,
"type": "word",
"position": 1
},
{
"token": "방",
"start_offset": 5,
"end_offset": 6,
"type": "word",
"position": 2
},
{
"token": "에",
"start_offset": 6,
"end_offset": 7,
"type": "word",
"position": 3
},
{
"token": "들어가",
"start_offset": 8,
"end_offset": 11,
"type": "word",
"position": 4
},
{
"token": "시",
"start_offset": 11,
"end_offset": 13,
"type": "word",
"position": 5
},
{
"token": "ㄴ다",
"start_offset": 11,
"end_offset": 13,
"type": "word",
"position": 6
}
]
}
좀 더 풍부하게 토큰화 되었습니다
"아버지" 단어도 인식했고, "방"도 인식하는군요
노리 플러그인이 한글을 좀 더 정확하게 "토큰화"해주는것을 볼 수 있습니다
단어를 토큰화하여 색인되어야 elasticsearch를 통해 원하는 단어로 검색이 가능한건데
이렇듯 정확한 한글검색을 위해서는 한글 토크나이저가 필요합니다
nori analyzer는
nori tokenizer를 통해 토큰화를 완료하고
그리고 3개의 토큰 필터를 동작시킵니다
nori_part_of_speech 토큰 필터 - 에, 가 이러한 검색에 필요없는 단어들을 제거합니다
nori_readingform 토큰필터 - 한자가 있는 경우 한자를 한글로 저장합니다(鄕歌 -> 향가)
lowercase 토큰 필터 - 영단어가 있는 경우 영어 단어 대문자를 소문자화합니다
이렇게 nori analyzer를 통해서
"아버지가 방에 들어가신다"
라는 문장은 "아버지", "방"이라는 단어로 역색인화 되었고,
"아버지" 또는 "방"을 검색했을때 이 문장을 찾을수 있게 되는것이예요
'AWS' 카테고리의 다른 글
AWS 웹어플리케이션 방화벽 waf & shield (0) | 2022.03.24 |
---|---|
elasticsearch nori analyzer index에 적용하기 (0) | 2022.03.01 |
elasticsearch 손쉽게 설치하기 (0) | 2022.02.27 |
데이터베이스도 사용한 만큼만 요금 지불해볼까? aurora serverless (0) | 2022.02.11 |
aws aurora database 로 손쉬운 replication 클러스터 구축 (0) | 2022.02.10 |
- Total
- Today
- Yesterday
- CSS
- AWS
- 앱
- Apple
- 구글
- 앱스토어
- 스마트폰
- 모바일
- 벤처
- 대학생
- JavaScript
- 네이버
- 어플리케이션
- 웹표준
- 게임
- iPhone
- 트위터
- 소프트웨어
- 공모전
- 안드로이드
- 아이폰
- 창업
- 자바스크립트
- 경진대회
- 애플
- android
- 아이디어
- php
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |