Elasticsearch 의한글검색활용 Elastic Community Engineer 김종민 2018. 10. 18
Elastic?
Elastic? Elasticsearch 라는검색엔진을개발한회사입니다. (ELK Stack 으로더잘알려져있습니다.) 검색엔진은우리주변여기저기에있습니다. 요즘은검색엔진이데이터분석에도쓰입니다.
4 SEARCH
Multilingual Full Text Search Stemming Type ahead 5
Mobile Time Range Geo search Influenced by Rating Personalized Ranking 6
7
Search Pagination Time range Filter Numeric Filter Geo range Filter Stemming / Highlighting 8
9 Building search needs...
All this. Multi-lingual Secure Fast Query language Drill down Search APIs Unstructured High availability Highlighting Type ahead Scalable Alerting Query Language Enrichment 10
Elastic has all this. Real-time Multi-lingual Query language Search Fast Secure Query Language Scalable APIs Alerting Highlighting Enrichment Type ahead Unstructured High availability Drill down Data Sources 11
Kibana Visualize & Manage Elastic Stack Elasticsearch Store, Search, & Analyze Beats Logstash Ingest 12
Application Search Metrics Site Search APM Enterprise Search Business Analytics Logging Security Analytics Future Solutions Kibana Visualize & Manage Elastic Stack Elasticsearch Store, Search, & Analyze Beats Logstash Ingest 13
Solutions APM Site Search App Search 14
App Search Metrics Site Search APM Enterprise Search Business Analytics Logging Security Analytics Future Solutions Kibana Visualize & Manage Elastic Stack Elasticsearch Store, Search, & Analyze Beats Logstash Ingest SaaS Self Managed Elastic Cloud Elastic Cloud Enterprise Standalone Deployment 15
SaaS Self Managed Elastic Cloud Elastic Cloud Enterprise Standalone Elasticsearch Service Site Search App Search 16
Application Search Metrics Site Search APM Enterprise Search Business Analytics Logging Security Analytics Future Solutions Kibana Visualize & Manage Elastic Stack Elasticsearch Store, Search, & Analyze Beats Logstash Ingest SaaS Self Managed Elastic Cloud Elastic Cloud Enterprise Standalone Deployment 17
18
20
아파치루씬 (Apache Lucene) Created by - Doug Cutting Written in Java Apache Solr, Elasticsearch
RDBMS 에서는데이터를테이블형태로저장합니다. 열을기준으로인덱스를만듭니다. 책의맨앞에있는제목리스트와같습니다. DOC TEXT 1 The quick brown fox jumps over the lazy dog 2 Fast jumping rabbits
검색엔진에서는 inverted index 라는구조로저장합니다. RDBMS 와반대구조입니다. 텍스트를다뜯어서검색어사전을만듭니다. 책의맨뒤에있는페이지를가리키는키워드같습니다. 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
실제로는이렇게저장됩니다. 텍스트를저장할때몇가지처리과정을거칩니다. 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
텍스트처리 대소문자를변환합니다. 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
텍스트처리 토큰을 ( 보통 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
텍스트처리 불용어 (stopwords, 검색어로서의가치가없는단어들 ) 를제거합니다. a, an, are, at, be, but, by, do, for, i, no, the, to 등등 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
텍스트처리 형태소분석과정을거칩니다. 보통 ~s, ~ing 등을제거하는과정입니다. 한글은의미분석을해야해서좀더복잡합니다. 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
텍스트처리 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
텍스트처리 동의어를처리합니다. 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
검색 검색어도똑같이텍스트처리를합니다. The lazy rabbits 라고검색하면 lazi, rabbit 검색어를찾습니다. The lazy rabbits lazi rabbit 1 2 DOC TEXT 1 The quick brown fox jumps over the lazy dog 2 Fast jumping rabbits
검색엔진과 RDBMS 비교 RDBMS 는쿼리시점, 검색엔진은색인시점이중요합니다. RDBMS 검색엔진 데이터저장방식정규화역정규화 전문 (Full Text) 검색속도느림빠름 의미검색불가능가능 Join 가능불가능 수정 / 삭제빠름느림
한글검색 한글은복합어로이루어진언어입니다. 단순한 whitespace 기반이아닌단어사전기반의분석이필요합니다. 동해물과백두산이 동해 + 물 / 백두 + 산 동 + 해물 / 백 + 두산 대학생선교회 대학생 + 선교 + 회 대학 + 생선 + 교회
한글형태소분석기 Elasticsearch 에서사용가능한한글형태소분석기는 아래와같은프로젝트들이있습니다.
2018. 08 Nori 출시 https://www.elastic.co/kr/blog/nori-the-official-elasticsearch-plugin-forkorean-language-analysis
What is Nori? Created by Jim Ferenczi https://github.com/jimczi Creator of Kuromoji Japanese Text Analyzer Contributor of MeCab 은전한닢의 mecab-ko-dic 사전을사용합니다. Nori 는 Kuromoji 엔진의코드를 fork 해서 mecab-ko-dic 사전을적용시킨 Elasticsearch 독자적인형태소분석기입니다.
Why Nori? https://issues.apache.org/jira/browse/lucene-8231
Why Nori? https://issues.apache.org/jira/browse/lucene-8231
How Nori? https://github.com/apache/lucene-solr/tree/master/lucene/analysis
How Nori? mecab-ko-dic 사전사이즈 : 약 200MB
How Nori? nori 사전사이즈 : 24MB
How Nori? mecab-ko-dic 사전구조 NNG.csv
How Nori? 출처 : 꼬꼬마한국어형태소분석기 http://kkma.snu.ac.kr/documents/?doc=postag Korean POS (Part Of Speech) Table
How Nori? nori 사전구조 : CSV(array) 형식의텍스트로저장된사전을 FST (finite state transducer) 로부호화하고 Binary 구조로재구성. Matrix.def 파일가변길이로변경후직렬화
How Nori? nori 사전구조 : 명사와합성어의부분들을부호화 사전에서중복제거 오른쪽어절이왼쪽어절과다른경우에만저장하고다르면저장하지않음. ( 중복제거 )
How Nori? 자세한사용법은 Elastic 공식도큐먼트에있습니다. https://www.elastic.co/guide/en/elasticsearch/plugins/6.4/analysis-nori.html
감사합니다 Elastic 부스에서더많은데모들을시연중이니많이들러주세요. https://www.facebook.com/groups/elasticsearch.kr/