12. 12
Elastic has all this.
Secure
Multi-lingual
Query language
Real-time Drill down
APIs
Data Sources
Enrichment
Alerting
Query Language
Unstructured
Search
Type ahead
High availability
Fast
Highlighting
Scalable
20. 20
RDBMS 에서는 데이터를 테이블 형태로 저장합니다.
열을 기준으로 인덱스를 만듭니다.
책의 맨 앞에 있는 제목 리스트와 같습니다.
DOC TEXT
1 The quick brown fox jumps over the lazy dog
2 Fast jumping rabbits
21. 21
검색엔진에서는 inverted index 라는 구조로
저장합니다.
RDBMS 와 반대 구조입니다.
텍스트를 다 뜯어서 검색어 사전을 만듭니다. (Term 이라고 합니다)
책의 맨 뒤에 있는 페이지를 가리키는 키워드 같습니다.
TOKEN (TERM) DOC TOKEN (TERM) DOC
Fast 2 jumps 1
The 1 lazy 1
brown 1 over 1
dog 1 quick 1
fox 1 rabbits 2
jumping 2 the 1
22. 22
실제로는 이렇게 저장됩니다.
텍스트를 저장할 때 몇가지 처리 과정을 거칩니다.
이 과정을 텍스트 분석 (Text Analysis) 라고 합니다.
TOKEN (TERM) DOC TOKEN (TERM) DOC
brown 1 lazi 1
dog 1 over 1
fast 1 , 2 quick 1 , 2
fox 1 rabbit 2
jump 1 , 2
23. 23
텍스트 분석 과정
문장을 분리합니다. 이 과정을 Tokenizing 이라고 합니다.
보통은 Whitespace Tokenizer 가 사용됩니다.
TOKEN (TERM) TOKEN (TERM) TOKEN (TERM) TOKEN (TERM)
Fast dog jumps quick
The fox lazy rabbits
brown jumping over the
TEXT
The quick brown fox jumps over the lazy dog
Fast jumping rabbits
24. 24
텍스트 분석 과정
Tokenized 된 Term 들을 가공합니다. 이 과정을 Token Filtering 이라고 합니다.
먼저 Lowercase Token Filter로 대소문자를 변환 합니다.
TOKEN (TERM) DOC TOKEN (TERM) DOC
Fast fast 2 jumps 1
The the 1 lazy 1
brown 1 over 1
dog 1 quick 1
fox 1 rabbits 2
jumping 2 the 1
25. 25
텍스트 분석 과정
토큰을 (보통 ascii 순서로) 재 정렬합니다.
TOKEN (TERM) DOC TOKEN (TERM) DOC
brown 1 lazy 1
dog 1 over 1
fast 2 quick 1
fox 1 rabbits 2
jumping 2 the 1
jumps 1 the 1
26. 26
텍스트 분석 과정
불용어(stopwords, 검색어로서의 가치가 없는 단어들) 를 제거합니다.
a, an, are, at, be, but, by, do, for, i, no, the, to … 등등
Stop Token Filter 가 사용됩니다.
TOKEN (TERM) DOC TOKEN (TERM) DOC
brown 1 lazy 1
dog 1 over 1
fast 2 quick 1
fox 1 rabbits 2
jumping 2 the 1
jumps 1 the 1
27. 27
텍스트 분석 과정
형태소 분석 과정을 거칩니다. 보통 ~s, ~ing 등을 제거하는 과정입니다.
보통 Snowball Token Filter 를 사용합니다.
한글은 의미 분석을 해야 해서 좀 더 복잡합니다.
TOKEN (TERM) DOC TOKEN (TERM) DOC
brown 1 lazy lazi 1
dog 1 over 1
fast 2 quick 1
fox 1 rabbits rabbit 2
jumping jump 2
jumps jump 1
28. 28
텍스트 분석 과정
jumping, jumps가 jump 로 똑같이 바뀌었으므로 토큰을 병합 해 줍니다.
TOKEN (TERM) DOC TOKEN (TERM) DOC
brown 1 lazi 1
dog 1 over 1
fast 2 quick 1
fox 1 rabbit 2
jump 1 , 2
29. 29
텍스트 분석 과정
동의어를 처리합니다.
Synonym Token Filter 를 이용해 동의어 사전을 정의할 수 있습니다.
TOKEN (TERM) DOC TOKEN (TERM) DOC
brown 1 lazi 1
dog 1 over 1
fast 1 , 2 quick 1 , 2
fox 1 rabbit 2
jump 1 , 2
30. 30
검색 과정
검색어도 똑같이 텍스트 처리를 합니다.
“The lazy rabbits” 라고 검색하면
The lazy rabbits
lazi
rabbit
1
DOC TEXT
1 The quick brown fox jumps over the lazy dog
2 Fast jumping rabbits
2
32. 32
한글 검색
한글은 복합어로 이루어진 언어입니다.
단순한 whitespace 기반이 아닌 단어 사전 기반의 분석이 필요합니다.
• 동해물과 백두산이
– 동해 + 물 / 백두 + 산
– 동 + 해물 / 백 + 두산
• 대학생선교회
– 대학생 + 선교 + 회
– 대학 + 생선 + 교회
33. 33
한글 형태소 분석기
Elasticsearch 에서 사용 가능한 한글 형태소 분석기는
아래와 같은 프로젝트들이 있습니다.
- 아리랑 : 이수명, 정호욱님
- 은전한닢 : 유영호, 이용운님
- open-korean-text : 유호현님
34. 34
2018. 08 – Nori 출시
https://www.elastic.co/kr/blog/nori-the-official-elasticsearch-plugin-for-
korean-language-analysis
35. 35
What is Nori?
• https://github.com/jimczi
• Creator of Kuromoji – Japanese Text Analyzer
• Contributor of MeCab
• 은전한닢의 mecab-ko-dic 사전을 사용합니다.
http://eunjeon.blogspot.com
• Nori는 Kuromoji 엔진의 코드를 fork 해서 mecab-ko-dic 사전을 적용시킨
Elasticsearch 독자적인 형태소 분석기 입니다.
Created by Jim Ferenczi