Publicité
Publicité

Contenu connexe

Présentations pour vous(20)

Similaire à 차곡차곡 쉽게 알아가는 Elasticsearch와 Node.js(20)

Publicité

Dernier(20)

차곡차곡 쉽게 알아가는 Elasticsearch와 Node.js

  1. 차곡차곡 쉽게 알아가는 ELASTICSEARCH와 NODE.JS 황희정 (gyahoo617@gmail.com)
  2. 소개 • 상반기/하반기 년 2회 오프라인 스터디 진행 • 다양한 기술 스터디 • Java, Spring, HTML, CSS, SQL, 검색엔진(Elasticsearch), 머신러닝 등 최신 IT 트렌드 • 자바카페 페이스북 : https://www.facebook.com/groups/javacafe/ • 자바카페 기술 블로그 : http://tech.javacafe.io/
  3. 발표순서 • 검색엔진과 Elasticsearch 소개 • Elasticsearch에서의 색인 • Elasticsearch에서의 조회 • Node.js 로 구현된 예제 소개
  4. 예제소개 https://youtu.be/JEVCMqyYUL8
  5. 관계형 데이터 베이스(RDB)에서 검색의 한계 • 긴 문서에서 like 검색은? • 문서의 길이가 길고 다량의 문서에서 유사한 문서는 어떻게 찾을까? • 등등...
  6. OPEN SOURCE SEARCH ENGINE • Java 기반 오픈 소스 검색엔진 • Apache Lucene, Apache Solr, Elasticsearch
  7. TREND • 출처 : DB-Engines.com
  8. ELASTICSEARCH 특징 • Apache Lucene 기반 • 분산형 RESTful 검색 및 분석 엔진 • 정형, 비정형, 위치정보, 메트릭 등 원하는 방법으로 다양한 유형의 검색을 수행하고 결합 가능 • 초당 엄청난 양의 이벤트를 처리할 수 있도록 수평적 확장이 가능 • 최소 요구사항 : Java 8 이상, 메모리 4G이상
  9. 검색엔진에서의 색인과 검색
  10. ELASTICSEARCH에서의 색인 HTTP SAVE
  11. ELASTICSEARCH에서 색인 과정에서의 색인과 분석 • Tokenizer(토크나이저) : 문자열을 단어 단위로 잘라서 토큰을 만듦 • TokenFilter(토큰 필터) : 토크나이저에 의해 만들어진 토큰을 변형(예: 대문자->소문자화, a, the 삭제 등) • Inverted Index(역색인) : 토큰과 토큰에 관한 정보를 가지고 있는 자료 구조로 저장 Tokenizer Token Filter Inverted Index
  12. ELASTICSEARCH에서 검색 과정 • 사용자의 질의 분석 • 사용자의 질의와 일치하거나 유사한 문서 검색 • 결과 반환 Tokenizer Token Filter Query Inverted Index Result
  13. 한국어 분석기 • 한나눔, 꼬꼬마, Komoran, Mecab, Twitter, 아리랑 등 한나눔 꼬꼬마 Komoran Mecab Twitter 아버지가방에들어가 / N 아버지 / NNG 아버지가방에들어가신다 / NNP 아버지 / NNG 아버지 / Noun 이 / J 가방 / NNG 가 / JKS 가방 / Noun 시ㄴ다 / E 에 / JKM 방 / NNG 에 / Josa 들어가 / VV 에 / JKB 들어가신 / Verb 시 / EPH 들어가 / VV 다 / Eomi ㄴ다 / EFN 신다 / EP+EC 출처 : http://konlpy.org/ko/latest/morph/#comparison-between-pos-tagging-classes
  14. ELASTICSEARCH 설치 • 공식 홈페이지에서 elasticsearch 다운로드 • Elasticsearch 실행 • 리눅스 : Bin 하위 디렉토리의 elasticsearch 쉘 실행 • 윈도우 : Bin 하위 디렉토리의 elasticsearch.bat 실행 • 참고 • https://www.elastic.co/kr/downloads/elasticsearch
  15. RESTFUL API WITH JSON OVER HTTP • RESTfulAPI 를 사용하여 Elasticsearch 와 통신할 수 있음 • 제공하는 API • Document API • Search API • Indices API • Cat API • Cluster API • 등등 • 참고 : https://www.elastic.co/guide/en/elasticsearch/reference/current/getting-started.html
  16. ELASTICSEARCH CLIENT LIBRARY • 공식 지원 • Curl • Java • C# • Python • JavaScript • PHP • Perl • Ruby • 커뮤니티 제공 • B4J, Clojure,ColdFusion (CFML),Erlang,Go,Groovy,Haskell,Java,JavaScript,kotlin,Lua,.NET,OCaml,Perl,PHP,Python,R, Ruby,Rust,Scala,Smalltalk,Vert.x
  17. NPM • NPM 프로젝트의 경우 • npm install elasticsearch
  18. 예제 소개 데이터 출처 : 영화관입장권통합전산망 오픈 API (영화진흥위원회) https://youtu.be/JEVCMqyYUL8
  19. ARCHITECTURE 1. 읽기 영화정보 2. 색인 1. 검색요청 2. 검색 3. 결과반환 { "movieCd": "20173732", "movieNm": "살아남은 아이", "movieNmEn": "Last Child", "prdtYear": "2017", "openDt": "", "typeNm": "장편", "prdtStatNm": "기타", "nationAlt": "한국", "genreAlt": "드라마,가족", "repNationNm": "한국", "repGenreNm": "드라마", "directors": [ { "peopleNm": "신동석" } ], "companys": []}
  20. 인덱스 설계 자동완성어 검색 영화 검색
  21. 인덱스 설계 movie_autocomplete movie { "movieCd": "20173732", "movieNm": "살아남은 아이", "movieNmEn": "Last Child", "prdtYear": "2017", "openDt": "", "typeNm": "장편", "prdtStatNm": "기타", "nationAlt": "한국", "genreAlt": "드라마,가족", "repNationNm": "한국", "repGenreNm": "드라마", "directors": [ { "peopleNm": "신동석" } ], "companys": []} { "token": "ㅇ", "start_offset": 0, "end_offset": 11, "type": "word", "position": 0 } { "token": "ㅇㅏ", "start_offset": 0, "end_offset": 11, "type": "word", "position": 0 } { "token": "ㅇㅏㅂ", "start_offset": 0, "end_offset": 11, "type": "word", "position": 0 } { "token": "ㅇㅏㅂㅓ", "start_offset": 0, "end_offset": 11, "type": "word", "position": 0 } { "token": "ㅇㅏㅂㅓㅈ", "start_offset": 0, "end_offset": 11, "type": "word", "position": 0 } { "token": "ㅇㅏㅂㅓㅈㅣ", "start_offset": 0, "end_offset": 11, "type": "word", "position": 0 } { "token": "아버지/N", "start_offset": 0, "end_offset": 3, "type": "N", "position": 0 } { "token": "방/N", "start_offset": 4, "end_offset": 5, "type": "N", "position": 1 } { "token": "들어가/V", "start_offset": 6, "end_offset": 9, "type": "V", "position": 2 } 한글자모분석기 은전한닢s
  22. ELASTICSEARCH CLIENT • Elasticsearch 클라이언트 • 재사용 가능한 객체 • 내부적으로는 curl –XGET ‘localhost:9200’ 과 같은 원리
  23. INDEX(인덱스) 생성 • Indices API 사용 • 인덱스명과 인덱스에 사용할 분석기 지정 • 자동완성어의 경우 : 자모분석기 사용 • 영화 검색의 경우 : s은전한닢 분석기 사용 movie_autocomplete movie
  24. 인덱스 필드 매핑설정 컬럼 내용 Type Analyzer 예 movieCd 영화코드 keyword - 20173732 movieNm 영화이름 text 은전한닢s 살아남은 아이 prdtYear 개봉년도 integer - 2017 genreAlt 장르 종류 Keyword (array) - 드라마,가족 movie_autocomplete movie 컬럼 내용 Type Analyzer 예 movieCd 영화코드 keyword - 20173732 movieNm 영화이름 text 한글자모분석 살아남은 아이 prdtYear 개봉년도 integer - 2017 genreAlt 장르 종류 Keyword (array) - 드라마,가족
  25. 데이터 색인 • Bulk API 를사용해서 데이터 색인 • 색인이 이루어지는 동안에도 조회가 가능 (준실시간 검색 가능)
  26. 데이터 조회 및 집계 • Search API 사용 자동완성어 검색 영화 검색 집계 movie movie_ autocomplete
  27. THANK YOU
Publicité