SlideShare a Scribd company logo
1 of 50
Download to read offline
2014.11.08 Session 3-2 XECon + PHPFest 2014 
ElasticSearch를 이용한 
통합검색 구축방법 
@hoonmin 김훈민 
NAVER LABS
누구세요? 
• 김훈민! 
• http://github.com/hoonmin! 
• 네이버 랩스에서 일합니다.! 
• 자바 개발자. 성능 엔지니어.! 
• 오픈소스 캐시 솔루션인 Arcus의 커미터 입니다.! 
• http://github.com/naver/arcus! 
• 결혼 3년차 딸바보 아빠입니다. 
2
발표할 주제는? 
3
출처: http://clien.net 4
5
내가 운영하는 XE 사이트에! 
통합 검색을 붙이고 싶다면? 
6
7
간단한 검색 이론(?)! 
! 
“반지”라는 단어를 포함하고 있는! 
톨킨의 작품 목록을 구하려면? 
8
Grep “반지” * 
• 모든 작품에 대해 grep을 실행합니다.! 
• 해당 단어를 가진 작품을 출력합니다.! 
! 
• 수백만 건의 문서에 대해 매번 같은 일을 한다면? 
Oops… 
9
역 인덱스 (inverted index) 
• 모든 작품 텍스트에서 단어들을 추출하여 저장! 
• 각 단어에 대해, 그 단어가 포함된 작품의 id를 기 
록 
10 
단어 작품 출현 빈도 작품 id 
Ring 5 1, 2, 3, 4, 5 
Middle-Earth 4 1, 3, 4, 5 
Gollum 4 2, 3, 4, 5
Apache Lucene 
http://lucene.apache.org/core/ 
11
출처: http://horicky.blogspot.kr/2013/02/text-processing-part-2-inverted-index.html 12
Lucene 기반 검색엔진의 양대 산맥 
13 
* Solr와 ElasticSearch를 자세히 비교한 자료 
http://db-engines.com/en/system/Elasticsearch%3BSolr%3BSphinx
Google Trend 
14 
Lucene 
Solr 
ElasticSearch
ElasticSearch 
http://elasticsearch.org 
15
특징 
• Lucene! 
• Schema-Free (JSON)! 
• Distributed! 
• Multi-tenancy! 
• RESTful APIs 
16
용어 
17 
ElasticSearch DBMS 
Index Database 
Document Type Table 
Document Row 
Field Column
JSON Document 
{! 
! "_id": "1",! 
! "name": “Hoonmin Kim",! 
! "birth_year": 1981,! 
! "tags": ["Naver", "Arcus", "DevOps"],! 
! "location" : {! 
! ! "city": "용인시"! 
! }! 
} 18
API : Index 생성 
curl -XPUT ‘localhost:9200/resume' -d '! 
{! 
! “settings”: {! 
! ! …! 
! },! 
! “mappings”: {! 
! ! …! 
! }! 
}' 
19 
인덱스 
이름 
인덱스 설정! 
(Optional)
API : Document 추가 
curl -XPUT ‘localhost:9200/resume/person/1’ -d ‘! 
{! 
! “name”: “Hoonmin Kim”,! 
! “tags”: [“Naver”, “Arcus”]! 
}’! 
! 
201 (CREATED) - 신규 생성 됨! 
200 (OK) - 업데이트(reindex) 됨 
20 
Document 
Type 
_id
API : Document 조회 
curl -XGET ‘localhost:9200/resume/person/1’! 
! 
! 
! 
{! 
! “name”: “Hoonmin Kim”,! 
! “tags”: [“Naver”, “Arcus”]! 
} 
21 
document 
type 
document 
id 
인덱스! 
이름
API : Document 삭제 
curl -XDELETE ‘localhost:9200/resume/person/1’! 
! 
! 
22
API : Multi Get 
curl ‘localhost:9200/resume/_mget’ -d ‘{! 
! “docs” : [! 
! ! {! 
! ! ! “_type”: “person”,! 
! ! ! “_id”: “1”! 
! ! },! 
! ! …! 
! ]! 
} 
23
API : Search 
curl -XGET! 
! ‘localhost:9200/resume/_search?q=naver’! 
! 
{ …! 
! “hits”: {! 
! ! “total”: 1, “max_score”: 0.15342641,! 
! ! “hits”: [! 
! ! ! { … }! 
! ! ]! 
! }! 
} 24
API : Search Query DSL 
curl -XPOST ‘localhost:9200/resume/_search’ -d ‘! 
{! 
“query”: {! 
! “bool”: {! 
! ! “must”: [! 
! ! ! { “match”: {“name”: “kim”} }! 
! ! ]! 
! }! 
}}’ 
25
Distributed Cluster 
26 
Master 
Node 0
Distributed Cluster 
27 
Master 
Node 0! 
! 
! 
! 
index 생성 
Primary! 
Shard 0 
Primary! 
Shard 1 
Lucene 
Worker
Distributed Cluster 
28 
Master 
Node 0! 
! 
! 
! 
Primary! 
Shard 0 
Node 1! 
! 
! 
! 
Primary! 
Shard 1
Distributed Cluster 
29 
Master 
Node 0! 
! 
! 
! 
Primary! 
Shard 0 
Node 1! 
! 
! 
! 
Primary! 
Shard 1 
Replica! 
Shard 1 
Replica! 
Shard 0
Distributed Cluster 
30 
Master 
Node 0! 
! 
! 
! 
Primary! 
Shard 0 
Node 1! 
! 
! 
! 
Primary! 
Shard 1 
Replica! 
Shard 1 
Replica! 
Shard 0
Distributed Cluster 
31 
Node 0! 
! 
! 
! 
Master 
Primary! 
Shard 0 
Node 1! 
! 
! 
! 
Primary! 
Shard 1 
Replica! 
Shard 1 
Primary! 
Shard 0
데모 : XE 게시판 통합 검색 
32
목표 
• 2개의 게시판 모듈! 
• 게시글 약 6만 건! 
• 간단한 제목 + 내용 검색! 
• 간단한 검색 UI! 
! 
• XE 검색 모듈 개발 (TODO) 
33
http://125.209.193.50:49088 
34
데모 시스템 구성 
35 
:80 :3306 
Apache MariaDB 
XE (PHP) 
docker container
데모 시스템 구성 
36 
Apache MariaDB 
XE (PHP) 
Elastic- 
Search 
JDBC 
plugin 
:3306 
:9200 
:80 :9300 
docker container
데모 시스템 구성 
37 
Apache MariaDB 
XE (PHP) 
Elastic- 
Search 
JDBC 
plugin 
:3306 
:9200 
:80 :9300 
docker container 
:80 
Web UI! 
http-server
ElasticSearch 설치 및 실행 
• Java 런타임 필요! 
• 설치! 
• http://www.elasticsearch.org/download! 
• apt-get, yum! 
• 실행! 
• $ elasticsearch -d 
참고: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/setup.html 38
39
인덱스 설계 
• 인덱싱 할 테이블과 컬럼을 확인! 
• xe_documents! 
• xe_modules! 
• xe_comments! 
• 원본 데이터를 어떤 형식으로 저장할 것인지 결정! 
• 게시글과 덧글을 구분 해야 하나?! 
• 주로 어떤 쿼리를 날릴 것인가? 
40
데모 인덱스 구조 
41 
index 
document_type 
document 
xe_index 
document 
{ 
module : { … }, 
article : { … }, 
comment : { … } 
}
JDBC Plugin (1) 
• ElasticSearch의 플러그인 중 하나! 
• JDBC(Java DataBase Connectivity)! 
• 자바에서 DB에 접속할 수 있도록 하는 API! 
• DB에서 설정된 쿼리들을 실행한 결과를 변환하 
여 인덱스의 문서로 저장! 
• https://github.com/jprante/elasticsearch-river- 
jdbc 
42
JDBC Plugin (2) 
출처: https://github.com/jprante/elasticsearch-river-jdbc/raw/master/src/site/resources/simple-tabular-json-data.png 43
JDBC Plugin (3) 
curl -XPUT elasticsearch:9200/_river/xe_index/_meta -d '{ 
"type": "jdbc", 
"jdbc": { 
44 
"index": "xe_index", 
"type": "document", 
"url": “jdbc:mysql://<hostname or IP>:3306/maria", 
"user": "maria", 
"password": "maria", 
"sql": “SELECT …” 
} 
}'
JDBC Plugin (4) 
45 
SELECT 
d.document_srl as `_id`, 
d.document_srl as `article.document_srl`, ... 
m.mid as `module.mid`, ... 
c.comment_srl as `comments[comment_srl]`, ... 
FROM 
xe_documents as d 
INNER JOIN 
xe_modules as m on d.module_srl = m.module_srl 
INNER JOIN 
xe_comments as c on c.module_srl = m.module_srl 
AND 
c.document_srl = d.document_srl;
제목+내용 검색 
curl -XPOST http://elasticsearch:9200/xe_index/document/_search -d ' 
{ 
46 
"size": 10, 
"from": 0, 
"query": { 
"bool": { 
"must": [ 
{ "match": { "article.title": "XE" }}, 
{ "match": { "article.content": "XE" }}, 
{ "fuzzy" : { "article.content" : "XE"}} 
] 
} 
} 
}'
최신순 정렬 
curl -XPOST http://elasticsearch:9200/xe_index/document/_search -d ' 
{ 
47 
"size": 10, 
"from": 0, 
"query": { … }, 
"sort": [ 
{ "article.regdate" : {"order" : "desc"}}, 
"_score" 
] 
}'
정확도 순 정렬 
curl -XPOST http://elasticsearch:9200/xe_index/document/_search -d ' 
{ 
48 
"size": 10, 
"from": 0, 
"query": { … }, 
"sort": [ 
"_score", 
{ "article.regdate" : {"order" : "desc"}} 
] 
}'
다루지 못한 내용들 
• 보안! 
• 쿼리 튜닝! 
• 다양한 쿼리와 필터를 실험! 
• 형태소 분석기 적용! 
• 한글 형태소 분석을 통해 정확한 단어를 추출! 
• … 
49
감사합니다. 
• 발표 관련 소스 코드는 GitHub을 확인해주세요.! 
• http://github.com/hoonmin/xecon2014! 
! 
• E-Mail : harebox@gmail.com! 
• Line : @harebox 
50

More Related Content

What's hot

Amazon Redshift로 데이터웨어하우스(DW) 구축하기
Amazon Redshift로 데이터웨어하우스(DW) 구축하기Amazon Redshift로 데이터웨어하우스(DW) 구축하기
Amazon Redshift로 데이터웨어하우스(DW) 구축하기Amazon Web Services Korea
 
AWS 고객이 주로 겪는 운영 이슈에 대한 해법-AWS Summit Seoul 2017
AWS 고객이 주로 겪는 운영 이슈에 대한 해법-AWS Summit Seoul 2017AWS 고객이 주로 겪는 운영 이슈에 대한 해법-AWS Summit Seoul 2017
AWS 고객이 주로 겪는 운영 이슈에 대한 해법-AWS Summit Seoul 2017Amazon Web Services Korea
 
[오픈소스컨설팅] 스카우터 사용자 가이드 2020
[오픈소스컨설팅] 스카우터 사용자 가이드 2020[오픈소스컨설팅] 스카우터 사용자 가이드 2020
[오픈소스컨설팅] 스카우터 사용자 가이드 2020Ji-Woong Choi
 
마이크로서비스를 위한 AWS 아키텍처 패턴 및 모범 사례 - AWS Summit Seoul 2017
마이크로서비스를 위한 AWS 아키텍처 패턴 및 모범 사례 - AWS Summit Seoul 2017마이크로서비스를 위한 AWS 아키텍처 패턴 및 모범 사례 - AWS Summit Seoul 2017
마이크로서비스를 위한 AWS 아키텍처 패턴 및 모범 사례 - AWS Summit Seoul 2017Amazon Web Services Korea
 
이벤트 기반 분산 시스템을 향한 여정
이벤트 기반 분산 시스템을 향한 여정이벤트 기반 분산 시스템을 향한 여정
이벤트 기반 분산 시스템을 향한 여정Arawn Park
 
Aws glue를 통한 손쉬운 데이터 전처리 작업하기
Aws glue를 통한 손쉬운 데이터 전처리 작업하기Aws glue를 통한 손쉬운 데이터 전처리 작업하기
Aws glue를 통한 손쉬운 데이터 전처리 작업하기Amazon Web Services Korea
 
Elastic Stack & Data pipeline
Elastic Stack & Data pipelineElastic Stack & Data pipeline
Elastic Stack & Data pipelineJongho Woo
 
Amazon RDS Proxy 집중 탐구 - 윤석찬 :: AWS Unboxing 온라인 세미나
Amazon RDS Proxy 집중 탐구 - 윤석찬 :: AWS Unboxing 온라인 세미나Amazon RDS Proxy 집중 탐구 - 윤석찬 :: AWS Unboxing 온라인 세미나
Amazon RDS Proxy 집중 탐구 - 윤석찬 :: AWS Unboxing 온라인 세미나Amazon Web Services Korea
 
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20Amazon Web Services Korea
 
[오픈소스컨설팅] 쿠버네티스와 쿠버네티스 on 오픈스택 비교 및 구축 방법
[오픈소스컨설팅] 쿠버네티스와 쿠버네티스 on 오픈스택 비교  및 구축 방법[오픈소스컨설팅] 쿠버네티스와 쿠버네티스 on 오픈스택 비교  및 구축 방법
[오픈소스컨설팅] 쿠버네티스와 쿠버네티스 on 오픈스택 비교 및 구축 방법Open Source Consulting
 
[124]네이버에서 사용되는 여러가지 Data Platform, 그리고 MongoDB
[124]네이버에서 사용되는 여러가지 Data Platform, 그리고 MongoDB[124]네이버에서 사용되는 여러가지 Data Platform, 그리고 MongoDB
[124]네이버에서 사용되는 여러가지 Data Platform, 그리고 MongoDBNAVER D2
 
우아한 모노리스
우아한 모노리스우아한 모노리스
우아한 모노리스Arawn Park
 
AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015
AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015 AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015
AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015 Amazon Web Services Korea
 
Amazon OpenSearch Deep dive - 내부구조, 성능최적화 그리고 스케일링
Amazon OpenSearch Deep dive - 내부구조, 성능최적화 그리고 스케일링Amazon OpenSearch Deep dive - 내부구조, 성능최적화 그리고 스케일링
Amazon OpenSearch Deep dive - 내부구조, 성능최적화 그리고 스케일링Amazon Web Services Korea
 
Elasticsearch development case
Elasticsearch development caseElasticsearch development case
Elasticsearch development case일규 최
 
Prometheus on EKS
Prometheus on EKSPrometheus on EKS
Prometheus on EKSJo Hoon
 
Amazon Aurora Deep Dive (김기완) - AWS DB Day
Amazon Aurora Deep Dive (김기완) - AWS DB DayAmazon Aurora Deep Dive (김기완) - AWS DB Day
Amazon Aurora Deep Dive (김기완) - AWS DB DayAmazon Web Services Korea
 
실시간 스트리밍 분석 Kinesis Data Analytics Deep Dive
실시간 스트리밍 분석  Kinesis Data Analytics Deep Dive실시간 스트리밍 분석  Kinesis Data Analytics Deep Dive
실시간 스트리밍 분석 Kinesis Data Analytics Deep DiveAmazon Web Services Korea
 
Airflow를 이용한 데이터 Workflow 관리
Airflow를 이용한  데이터 Workflow 관리Airflow를 이용한  데이터 Workflow 관리
Airflow를 이용한 데이터 Workflow 관리YoungHeon (Roy) Kim
 

What's hot (20)

AWS Fargate on EKS 실전 사용하기
AWS Fargate on EKS 실전 사용하기AWS Fargate on EKS 실전 사용하기
AWS Fargate on EKS 실전 사용하기
 
Amazon Redshift로 데이터웨어하우스(DW) 구축하기
Amazon Redshift로 데이터웨어하우스(DW) 구축하기Amazon Redshift로 데이터웨어하우스(DW) 구축하기
Amazon Redshift로 데이터웨어하우스(DW) 구축하기
 
AWS 고객이 주로 겪는 운영 이슈에 대한 해법-AWS Summit Seoul 2017
AWS 고객이 주로 겪는 운영 이슈에 대한 해법-AWS Summit Seoul 2017AWS 고객이 주로 겪는 운영 이슈에 대한 해법-AWS Summit Seoul 2017
AWS 고객이 주로 겪는 운영 이슈에 대한 해법-AWS Summit Seoul 2017
 
[오픈소스컨설팅] 스카우터 사용자 가이드 2020
[오픈소스컨설팅] 스카우터 사용자 가이드 2020[오픈소스컨설팅] 스카우터 사용자 가이드 2020
[오픈소스컨설팅] 스카우터 사용자 가이드 2020
 
마이크로서비스를 위한 AWS 아키텍처 패턴 및 모범 사례 - AWS Summit Seoul 2017
마이크로서비스를 위한 AWS 아키텍처 패턴 및 모범 사례 - AWS Summit Seoul 2017마이크로서비스를 위한 AWS 아키텍처 패턴 및 모범 사례 - AWS Summit Seoul 2017
마이크로서비스를 위한 AWS 아키텍처 패턴 및 모범 사례 - AWS Summit Seoul 2017
 
이벤트 기반 분산 시스템을 향한 여정
이벤트 기반 분산 시스템을 향한 여정이벤트 기반 분산 시스템을 향한 여정
이벤트 기반 분산 시스템을 향한 여정
 
Aws glue를 통한 손쉬운 데이터 전처리 작업하기
Aws glue를 통한 손쉬운 데이터 전처리 작업하기Aws glue를 통한 손쉬운 데이터 전처리 작업하기
Aws glue를 통한 손쉬운 데이터 전처리 작업하기
 
Elastic Stack & Data pipeline
Elastic Stack & Data pipelineElastic Stack & Data pipeline
Elastic Stack & Data pipeline
 
Amazon RDS Proxy 집중 탐구 - 윤석찬 :: AWS Unboxing 온라인 세미나
Amazon RDS Proxy 집중 탐구 - 윤석찬 :: AWS Unboxing 온라인 세미나Amazon RDS Proxy 집중 탐구 - 윤석찬 :: AWS Unboxing 온라인 세미나
Amazon RDS Proxy 집중 탐구 - 윤석찬 :: AWS Unboxing 온라인 세미나
 
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
 
[오픈소스컨설팅] 쿠버네티스와 쿠버네티스 on 오픈스택 비교 및 구축 방법
[오픈소스컨설팅] 쿠버네티스와 쿠버네티스 on 오픈스택 비교  및 구축 방법[오픈소스컨설팅] 쿠버네티스와 쿠버네티스 on 오픈스택 비교  및 구축 방법
[오픈소스컨설팅] 쿠버네티스와 쿠버네티스 on 오픈스택 비교 및 구축 방법
 
[124]네이버에서 사용되는 여러가지 Data Platform, 그리고 MongoDB
[124]네이버에서 사용되는 여러가지 Data Platform, 그리고 MongoDB[124]네이버에서 사용되는 여러가지 Data Platform, 그리고 MongoDB
[124]네이버에서 사용되는 여러가지 Data Platform, 그리고 MongoDB
 
우아한 모노리스
우아한 모노리스우아한 모노리스
우아한 모노리스
 
AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015
AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015 AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015
AWS로 사용자 천만 명 서비스 만들기 (윤석찬)- 클라우드 태권 2015
 
Amazon OpenSearch Deep dive - 내부구조, 성능최적화 그리고 스케일링
Amazon OpenSearch Deep dive - 내부구조, 성능최적화 그리고 스케일링Amazon OpenSearch Deep dive - 내부구조, 성능최적화 그리고 스케일링
Amazon OpenSearch Deep dive - 내부구조, 성능최적화 그리고 스케일링
 
Elasticsearch development case
Elasticsearch development caseElasticsearch development case
Elasticsearch development case
 
Prometheus on EKS
Prometheus on EKSPrometheus on EKS
Prometheus on EKS
 
Amazon Aurora Deep Dive (김기완) - AWS DB Day
Amazon Aurora Deep Dive (김기완) - AWS DB DayAmazon Aurora Deep Dive (김기완) - AWS DB Day
Amazon Aurora Deep Dive (김기완) - AWS DB Day
 
실시간 스트리밍 분석 Kinesis Data Analytics Deep Dive
실시간 스트리밍 분석  Kinesis Data Analytics Deep Dive실시간 스트리밍 분석  Kinesis Data Analytics Deep Dive
실시간 스트리밍 분석 Kinesis Data Analytics Deep Dive
 
Airflow를 이용한 데이터 Workflow 관리
Airflow를 이용한  데이터 Workflow 관리Airflow를 이용한  데이터 Workflow 관리
Airflow를 이용한 데이터 Workflow 관리
 

Viewers also liked

[Elasticsearch] 검색의 연관성 좀 더 높여보기
[Elasticsearch] 검색의 연관성 좀 더 높여보기[Elasticsearch] 검색의 연관성 좀 더 높여보기
[Elasticsearch] 검색의 연관성 좀 더 높여보기Hosang Jeon
 
Elasticsearch 설치 및 기본 활용
Elasticsearch 설치 및 기본 활용Elasticsearch 설치 및 기본 활용
Elasticsearch 설치 및 기본 활용종민 김
 
Logstash, ElasticSearch, Kibana
Logstash, ElasticSearch, KibanaLogstash, ElasticSearch, Kibana
Logstash, ElasticSearch, KibanaHyeonSeok Choi
 
XECon+PHPFest2014 발표자료 - 효율적인 css 개발방법 - 최대영
XECon+PHPFest2014 발표자료 - 효율적인 css 개발방법 - 최대영XECon+PHPFest2014 발표자료 - 효율적인 css 개발방법 - 최대영
XECon+PHPFest2014 발표자료 - 효율적인 css 개발방법 - 최대영XpressEngine
 
쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기Brian Hong
 
[2D1]Elasticsearch 성능 최적화
[2D1]Elasticsearch 성능 최적화[2D1]Elasticsearch 성능 최적화
[2D1]Elasticsearch 성능 최적화NAVER D2
 
형태소 분석기를 적용한 elasticsearch 운영
형태소 분석기를 적용한 elasticsearch 운영형태소 분석기를 적용한 elasticsearch 운영
형태소 분석기를 적용한 elasticsearch 운영창훈 정
 
Developing Rich Internet Applications with Perl and JavaScript
Developing Rich Internet Applications with Perl and JavaScriptDeveloping Rich Internet Applications with Perl and JavaScript
Developing Rich Internet Applications with Perl and JavaScriptnohuhu
 
PROV-O Tutorial. DC-2013 Conference
PROV-O Tutorial. DC-2013 ConferencePROV-O Tutorial. DC-2013 Conference
PROV-O Tutorial. DC-2013 Conferencedgarijo
 
Ots2014 arcus-collection-open source
Ots2014 arcus-collection-open sourceOts2014 arcus-collection-open source
Ots2014 arcus-collection-open sourceNAVER D2
 
[XECon2016] B-1 안정수 라라벨 Scout을 활용한 검색 기능 둘러보기
[XECon2016] B-1 안정수 라라벨 Scout을 활용한 검색 기능 둘러보기[XECon2016] B-1 안정수 라라벨 Scout을 활용한 검색 기능 둘러보기
[XECon2016] B-1 안정수 라라벨 Scout을 활용한 검색 기능 둘러보기XpressEngine
 
GRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: 보안 로그 분석을 위한 빅데이터 시스템 구축 사례
GRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: 보안 로그 분석을 위한 빅데이터 시스템 구축 사례GRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: 보안 로그 분석을 위한 빅데이터 시스템 구축 사례
GRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: 보안 로그 분석을 위한 빅데이터 시스템 구축 사례Gruter
 
210140048이나엘
210140048이나엘210140048이나엘
210140048이나엘LeeNael
 
Node.js 기반 정적 페이지 블로그 엔진, 하루프레스
Node.js 기반 정적 페이지 블로그 엔진, 하루프레스Node.js 기반 정적 페이지 블로그 엔진, 하루프레스
Node.js 기반 정적 페이지 블로그 엔진, 하루프레스Rhio Kim
 
엘라스틱서치 적합성 이해하기 20160630
엘라스틱서치 적합성 이해하기 20160630엘라스틱서치 적합성 이해하기 20160630
엘라스틱서치 적합성 이해하기 20160630Yong Joon Moon
 
(Fios#02) 2. elk 포렌식 분석
(Fios#02) 2. elk 포렌식 분석(Fios#02) 2. elk 포렌식 분석
(Fios#02) 2. elk 포렌식 분석INSIGHT FORENSIC
 
20151022 elasticsearch 적용및활용_송준이_sds발표용
20151022 elasticsearch 적용및활용_송준이_sds발표용20151022 elasticsearch 적용및활용_송준이_sds발표용
20151022 elasticsearch 적용및활용_송준이_sds발표용Junyi Song
 
3회 서울 Hadoop 사용자 모임 / 아파치 피닉스
3회 서울 Hadoop 사용자 모임 / 아파치 피닉스3회 서울 Hadoop 사용자 모임 / 아파치 피닉스
3회 서울 Hadoop 사용자 모임 / 아파치 피닉스Teddy Choi
 
엘라스틱서치 이해하기 20160613
엘라스틱서치 이해하기 20160613엘라스틱서치 이해하기 20160613
엘라스틱서치 이해하기 20160613Yong Joon Moon
 

Viewers also liked (20)

[Elasticsearch] 검색의 연관성 좀 더 높여보기
[Elasticsearch] 검색의 연관성 좀 더 높여보기[Elasticsearch] 검색의 연관성 좀 더 높여보기
[Elasticsearch] 검색의 연관성 좀 더 높여보기
 
Elasticsearch 설치 및 기본 활용
Elasticsearch 설치 및 기본 활용Elasticsearch 설치 및 기본 활용
Elasticsearch 설치 및 기본 활용
 
Logstash, ElasticSearch, Kibana
Logstash, ElasticSearch, KibanaLogstash, ElasticSearch, Kibana
Logstash, ElasticSearch, Kibana
 
XECon+PHPFest2014 발표자료 - 효율적인 css 개발방법 - 최대영
XECon+PHPFest2014 발표자료 - 효율적인 css 개발방법 - 최대영XECon+PHPFest2014 발표자료 - 효율적인 css 개발방법 - 최대영
XECon+PHPFest2014 발표자료 - 효율적인 css 개발방법 - 최대영
 
쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기쿠키런 1년, 서버개발 분투기
쿠키런 1년, 서버개발 분투기
 
[2D1]Elasticsearch 성능 최적화
[2D1]Elasticsearch 성능 최적화[2D1]Elasticsearch 성능 최적화
[2D1]Elasticsearch 성능 최적화
 
형태소 분석기를 적용한 elasticsearch 운영
형태소 분석기를 적용한 elasticsearch 운영형태소 분석기를 적용한 elasticsearch 운영
형태소 분석기를 적용한 elasticsearch 운영
 
Developing Rich Internet Applications with Perl and JavaScript
Developing Rich Internet Applications with Perl and JavaScriptDeveloping Rich Internet Applications with Perl and JavaScript
Developing Rich Internet Applications with Perl and JavaScript
 
PROV-O Tutorial. DC-2013 Conference
PROV-O Tutorial. DC-2013 ConferencePROV-O Tutorial. DC-2013 Conference
PROV-O Tutorial. DC-2013 Conference
 
Ots2014 arcus-collection-open source
Ots2014 arcus-collection-open sourceOts2014 arcus-collection-open source
Ots2014 arcus-collection-open source
 
[XECon2016] B-1 안정수 라라벨 Scout을 활용한 검색 기능 둘러보기
[XECon2016] B-1 안정수 라라벨 Scout을 활용한 검색 기능 둘러보기[XECon2016] B-1 안정수 라라벨 Scout을 활용한 검색 기능 둘러보기
[XECon2016] B-1 안정수 라라벨 Scout을 활용한 검색 기능 둘러보기
 
GRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: 보안 로그 분석을 위한 빅데이터 시스템 구축 사례
GRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: 보안 로그 분석을 위한 빅데이터 시스템 구축 사례GRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: 보안 로그 분석을 위한 빅데이터 시스템 구축 사례
GRUTER가 들려주는 Big Data Platform 구축 전략과 적용 사례: 보안 로그 분석을 위한 빅데이터 시스템 구축 사례
 
210140048이나엘
210140048이나엘210140048이나엘
210140048이나엘
 
Node.js 기반 정적 페이지 블로그 엔진, 하루프레스
Node.js 기반 정적 페이지 블로그 엔진, 하루프레스Node.js 기반 정적 페이지 블로그 엔진, 하루프레스
Node.js 기반 정적 페이지 블로그 엔진, 하루프레스
 
엘라스틱서치 적합성 이해하기 20160630
엘라스틱서치 적합성 이해하기 20160630엘라스틱서치 적합성 이해하기 20160630
엘라스틱서치 적합성 이해하기 20160630
 
(Fios#02) 2. elk 포렌식 분석
(Fios#02) 2. elk 포렌식 분석(Fios#02) 2. elk 포렌식 분석
(Fios#02) 2. elk 포렌식 분석
 
20151022 elasticsearch 적용및활용_송준이_sds발표용
20151022 elasticsearch 적용및활용_송준이_sds발표용20151022 elasticsearch 적용및활용_송준이_sds발표용
20151022 elasticsearch 적용및활용_송준이_sds발표용
 
elasticsearch
elasticsearchelasticsearch
elasticsearch
 
3회 서울 Hadoop 사용자 모임 / 아파치 피닉스
3회 서울 Hadoop 사용자 모임 / 아파치 피닉스3회 서울 Hadoop 사용자 모임 / 아파치 피닉스
3회 서울 Hadoop 사용자 모임 / 아파치 피닉스
 
엘라스틱서치 이해하기 20160613
엘라스틱서치 이해하기 20160613엘라스틱서치 이해하기 20160613
엘라스틱서치 이해하기 20160613
 

Similar to XECon+PHPFest2014 발표자료 - ElasticSearch를 이용한 통합검색 구축방법 - 김훈민

Express framework tutorial
Express framework tutorialExpress framework tutorial
Express framework tutorial우림 류
 
Ch1 일래스틱서치 클러스터 시작
Ch1 일래스틱서치 클러스터 시작Ch1 일래스틱서치 클러스터 시작
Ch1 일래스틱서치 클러스터 시작Minchul Jung
 
SOSCON 2017 - Backend.AI
SOSCON 2017 - Backend.AISOSCON 2017 - Backend.AI
SOSCON 2017 - Backend.AIJoongi Kim
 
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 DockerXECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 DockerXpressEngine
 
Mongo db 시작하기
Mongo db 시작하기Mongo db 시작하기
Mongo db 시작하기OnGameServer
 
[네이버오픈소스세미나] Contribution, 전쟁의 서막 : Apache OpenWhisk 성능 개선 - 김동경
[네이버오픈소스세미나] Contribution, 전쟁의 서막 : Apache OpenWhisk 성능 개선 - 김동경[네이버오픈소스세미나] Contribution, 전쟁의 서막 : Apache OpenWhisk 성능 개선 - 김동경
[네이버오픈소스세미나] Contribution, 전쟁의 서막 : Apache OpenWhisk 성능 개선 - 김동경NAVER Engineering
 
[225]yarn 기반의 deep learning application cluster 구축 김제민
[225]yarn 기반의 deep learning application cluster 구축 김제민[225]yarn 기반의 deep learning application cluster 구축 김제민
[225]yarn 기반의 deep learning application cluster 구축 김제민NAVER D2
 
Zeppelin(Spark)으로 데이터 분석하기
Zeppelin(Spark)으로 데이터 분석하기Zeppelin(Spark)으로 데이터 분석하기
Zeppelin(Spark)으로 데이터 분석하기SangWoo Kim
 
삶이편해지는_백엔드_개발자_지식.pdf
삶이편해지는_백엔드_개발자_지식.pdf삶이편해지는_백엔드_개발자_지식.pdf
삶이편해지는_백엔드_개발자_지식.pdfSeung kyoo Park
 
데이터 분석 1 - 소개
데이터 분석 1 - 소개데이터 분석 1 - 소개
데이터 분석 1 - 소개Jaewook Byun
 
Node js[stg]onimusha 20140822
Node js[stg]onimusha 20140822Node js[stg]onimusha 20140822
Node js[stg]onimusha 20140822병헌 정
 
CoreDot TechSeminar 2018 - Session1 Park Jihun
CoreDot TechSeminar 2018 - Session1 Park JihunCoreDot TechSeminar 2018 - Session1 Park Jihun
CoreDot TechSeminar 2018 - Session1 Park JihunCore.Today
 
이제 문서는 DocC로 만들때가 되지 않았나요?
이제 문서는 DocC로 만들때가  되지 않았나요?이제 문서는 DocC로 만들때가  되지 않았나요?
이제 문서는 DocC로 만들때가 되지 않았나요?hyunho Lee
 
XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3
XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3
XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3XpressEngine
 
DataWorks Summit 2017
DataWorks Summit 2017DataWorks Summit 2017
DataWorks Summit 2017Daesung Park
 
성공적인 게임 런칭을 위한 비밀의 레시피 #3
성공적인 게임 런칭을 위한 비밀의 레시피 #3성공적인 게임 런칭을 위한 비밀의 레시피 #3
성공적인 게임 런칭을 위한 비밀의 레시피 #3Amazon Web Services Korea
 
Cloud life seminar open shift,이준영(배포용)
Cloud life seminar   open shift,이준영(배포용)Cloud life seminar   open shift,이준영(배포용)
Cloud life seminar open shift,이준영(배포용)Software in Life
 

Similar to XECon+PHPFest2014 발표자료 - ElasticSearch를 이용한 통합검색 구축방법 - 김훈민 (20)

Express framework tutorial
Express framework tutorialExpress framework tutorial
Express framework tutorial
 
Mongo db 최범균
Mongo db 최범균Mongo db 최범균
Mongo db 최범균
 
Ch1 일래스틱서치 클러스터 시작
Ch1 일래스틱서치 클러스터 시작Ch1 일래스틱서치 클러스터 시작
Ch1 일래스틱서치 클러스터 시작
 
SOSCON 2017 - Backend.AI
SOSCON 2017 - Backend.AISOSCON 2017 - Backend.AI
SOSCON 2017 - Backend.AI
 
Node.js 기본
Node.js 기본Node.js 기본
Node.js 기본
 
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 DockerXECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
XECon2015 :: [1-5] 김훈민 - 서버 운영자가 꼭 알아야 할 Docker
 
Mongo db 시작하기
Mongo db 시작하기Mongo db 시작하기
Mongo db 시작하기
 
[네이버오픈소스세미나] Contribution, 전쟁의 서막 : Apache OpenWhisk 성능 개선 - 김동경
[네이버오픈소스세미나] Contribution, 전쟁의 서막 : Apache OpenWhisk 성능 개선 - 김동경[네이버오픈소스세미나] Contribution, 전쟁의 서막 : Apache OpenWhisk 성능 개선 - 김동경
[네이버오픈소스세미나] Contribution, 전쟁의 서막 : Apache OpenWhisk 성능 개선 - 김동경
 
[225]yarn 기반의 deep learning application cluster 구축 김제민
[225]yarn 기반의 deep learning application cluster 구축 김제민[225]yarn 기반의 deep learning application cluster 구축 김제민
[225]yarn 기반의 deep learning application cluster 구축 김제민
 
Zeppelin(Spark)으로 데이터 분석하기
Zeppelin(Spark)으로 데이터 분석하기Zeppelin(Spark)으로 데이터 분석하기
Zeppelin(Spark)으로 데이터 분석하기
 
삶이편해지는_백엔드_개발자_지식.pdf
삶이편해지는_백엔드_개발자_지식.pdf삶이편해지는_백엔드_개발자_지식.pdf
삶이편해지는_백엔드_개발자_지식.pdf
 
Node.js at OKJSP
Node.js at OKJSPNode.js at OKJSP
Node.js at OKJSP
 
데이터 분석 1 - 소개
데이터 분석 1 - 소개데이터 분석 1 - 소개
데이터 분석 1 - 소개
 
Node js[stg]onimusha 20140822
Node js[stg]onimusha 20140822Node js[stg]onimusha 20140822
Node js[stg]onimusha 20140822
 
CoreDot TechSeminar 2018 - Session1 Park Jihun
CoreDot TechSeminar 2018 - Session1 Park JihunCoreDot TechSeminar 2018 - Session1 Park Jihun
CoreDot TechSeminar 2018 - Session1 Park Jihun
 
이제 문서는 DocC로 만들때가 되지 않았나요?
이제 문서는 DocC로 만들때가  되지 않았나요?이제 문서는 DocC로 만들때가  되지 않았나요?
이제 문서는 DocC로 만들때가 되지 않았나요?
 
XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3
XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3
XECon2015 :: [2-4] 오승현 - Chak 서비스 구축기 with XE3
 
DataWorks Summit 2017
DataWorks Summit 2017DataWorks Summit 2017
DataWorks Summit 2017
 
성공적인 게임 런칭을 위한 비밀의 레시피 #3
성공적인 게임 런칭을 위한 비밀의 레시피 #3성공적인 게임 런칭을 위한 비밀의 레시피 #3
성공적인 게임 런칭을 위한 비밀의 레시피 #3
 
Cloud life seminar open shift,이준영(배포용)
Cloud life seminar   open shift,이준영(배포용)Cloud life seminar   open shift,이준영(배포용)
Cloud life seminar open shift,이준영(배포용)
 

More from XpressEngine

Docker 기반 개발환경 구축 - XE Open seminar #2
Docker 기반 개발환경 구축 - XE Open seminar #2Docker 기반 개발환경 구축 - XE Open seminar #2
Docker 기반 개발환경 구축 - XE Open seminar #2XpressEngine
 
Github 100% 활용하기 - XE Open seminar #3
Github 100% 활용하기 - XE Open seminar #3Github 100% 활용하기 - XE Open seminar #3
Github 100% 활용하기 - XE Open seminar #3XpressEngine
 
XE3 SEO를 다루기 - XE Open seminar #2
XE3 SEO를 다루기 - XE Open seminar #2XE3 SEO를 다루기 - XE Open seminar #2
XE3 SEO를 다루기 - XE Open seminar #2XpressEngine
 
XE Open seminar #2 - keynote
XE Open seminar #2 - keynoteXE Open seminar #2 - keynote
XE Open seminar #2 - keynoteXpressEngine
 
[XECon2016] A-1 정규창 [React] Immutable한 양방향 데이터 바인딩
[XECon2016] A-1 정규창 [React] Immutable한 양방향 데이터 바인딩[XECon2016] A-1 정규창 [React] Immutable한 양방향 데이터 바인딩
[XECon2016] A-1 정규창 [React] Immutable한 양방향 데이터 바인딩XpressEngine
 
[XECon2016] C-4 한성민 AngularJS 1, 2 그리고 실무환경 적용 이야기
[XECon2016] C-4 한성민 AngularJS 1, 2 그리고 실무환경 적용 이야기[XECon2016] C-4 한성민 AngularJS 1, 2 그리고 실무환경 적용 이야기
[XECon2016] C-4 한성민 AngularJS 1, 2 그리고 실무환경 적용 이야기XpressEngine
 
[XECon2016] C-3 이현석 팀장들이 꼽은 신입 PHP 개발자가 가급적 빨리 알았으면 하는 것들
[XECon2016] C-3 이현석 팀장들이 꼽은 신입 PHP 개발자가 가급적 빨리 알았으면 하는 것들[XECon2016] C-3 이현석 팀장들이 꼽은 신입 PHP 개발자가 가급적 빨리 알았으면 하는 것들
[XECon2016] C-3 이현석 팀장들이 꼽은 신입 PHP 개발자가 가급적 빨리 알았으면 하는 것들XpressEngine
 
[XECon2016] C-2 홍성범 XE3 Theme 제작 - 자유롭게, 그리고 편하게
[XECon2016] C-2 홍성범 XE3 Theme 제작 - 자유롭게, 그리고 편하게[XECon2016] C-2 홍성범 XE3 Theme 제작 - 자유롭게, 그리고 편하게
[XECon2016] C-2 홍성범 XE3 Theme 제작 - 자유롭게, 그리고 편하게XpressEngine
 
[XECon2016] C-1 오승훈 XE3로 웹사이트 만들기
[XECon2016] C-1 오승훈 XE3로 웹사이트 만들기[XECon2016] C-1 오승훈 XE3로 웹사이트 만들기
[XECon2016] C-1 오승훈 XE3로 웹사이트 만들기XpressEngine
 
[XECon2016] B-4 변종원 CodeIgniter와 PHP7
[XECon2016] B-4 변종원 CodeIgniter와 PHP7[XECon2016] B-4 변종원 CodeIgniter와 PHP7
[XECon2016] B-4 변종원 CodeIgniter와 PHP7XpressEngine
 
[XECon2016] B-3 성기진 XE1 가지치기와 오픈소스 생태계의 미래
[XECon2016] B-3 성기진 XE1 가지치기와 오픈소스 생태계의 미래[XECon2016] B-3 성기진 XE1 가지치기와 오픈소스 생태계의 미래
[XECon2016] B-3 성기진 XE1 가지치기와 오픈소스 생태계의 미래XpressEngine
 
[XECon2016] B-2 정광섭 Laravel로 스타트업 기술 스택 구성하기
[XECon2016] B-2 정광섭 Laravel로 스타트업 기술 스택 구성하기[XECon2016] B-2 정광섭 Laravel로 스타트업 기술 스택 구성하기
[XECon2016] B-2 정광섭 Laravel로 스타트업 기술 스택 구성하기XpressEngine
 
[XECon2016] A-3 박형식 Frontend stack의 변화 : jQuery, BackboneJS, ReactJS 중심으로
[XECon2016] A-3 박형식 Frontend stack의 변화 : jQuery, BackboneJS, ReactJS 중심으로[XECon2016] A-3 박형식 Frontend stack의 변화 : jQuery, BackboneJS, ReactJS 중심으로
[XECon2016] A-3 박형식 Frontend stack의 변화 : jQuery, BackboneJS, ReactJS 중심으로XpressEngine
 
[XECon2016] A-2 임형주 Webpack 실무 적용전략
[XECon2016] A-2 임형주 Webpack 실무 적용전략[XECon2016] A-2 임형주 Webpack 실무 적용전략
[XECon2016] A-2 임형주 Webpack 실무 적용전략XpressEngine
 
[XECon2016] A-4 조정현 GitHub + Jenkins + Docker로 자동배포 시스템 구축하기
[XECon2016] A-4 조정현 GitHub + Jenkins + Docker로 자동배포 시스템 구축하기[XECon2016] A-4 조정현 GitHub + Jenkins + Docker로 자동배포 시스템 구축하기
[XECon2016] A-4 조정현 GitHub + Jenkins + Docker로 자동배포 시스템 구축하기XpressEngine
 
XECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHub
XECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHubXECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHub
XECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHubXpressEngine
 
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기XpressEngine
 
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravelXECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravelXpressEngine
 
XECon2015 :: [1-2] 이현석 - Learning Laravel
XECon2015 :: [1-2] 이현석 - Learning LaravelXECon2015 :: [1-2] 이현석 - Learning Laravel
XECon2015 :: [1-2] 이현석 - Learning LaravelXpressEngine
 
XECon2015 :: [3-3] 김찬희 & 전창완- 네이버 아이디 로그인 소개 및 Laravel 적용
XECon2015 :: [3-3] 김찬희 & 전창완- 네이버 아이디 로그인 소개 및 Laravel 적용XECon2015 :: [3-3] 김찬희 & 전창완- 네이버 아이디 로그인 소개 및 Laravel 적용
XECon2015 :: [3-3] 김찬희 & 전창완- 네이버 아이디 로그인 소개 및 Laravel 적용XpressEngine
 

More from XpressEngine (20)

Docker 기반 개발환경 구축 - XE Open seminar #2
Docker 기반 개발환경 구축 - XE Open seminar #2Docker 기반 개발환경 구축 - XE Open seminar #2
Docker 기반 개발환경 구축 - XE Open seminar #2
 
Github 100% 활용하기 - XE Open seminar #3
Github 100% 활용하기 - XE Open seminar #3Github 100% 활용하기 - XE Open seminar #3
Github 100% 활용하기 - XE Open seminar #3
 
XE3 SEO를 다루기 - XE Open seminar #2
XE3 SEO를 다루기 - XE Open seminar #2XE3 SEO를 다루기 - XE Open seminar #2
XE3 SEO를 다루기 - XE Open seminar #2
 
XE Open seminar #2 - keynote
XE Open seminar #2 - keynoteXE Open seminar #2 - keynote
XE Open seminar #2 - keynote
 
[XECon2016] A-1 정규창 [React] Immutable한 양방향 데이터 바인딩
[XECon2016] A-1 정규창 [React] Immutable한 양방향 데이터 바인딩[XECon2016] A-1 정규창 [React] Immutable한 양방향 데이터 바인딩
[XECon2016] A-1 정규창 [React] Immutable한 양방향 데이터 바인딩
 
[XECon2016] C-4 한성민 AngularJS 1, 2 그리고 실무환경 적용 이야기
[XECon2016] C-4 한성민 AngularJS 1, 2 그리고 실무환경 적용 이야기[XECon2016] C-4 한성민 AngularJS 1, 2 그리고 실무환경 적용 이야기
[XECon2016] C-4 한성민 AngularJS 1, 2 그리고 실무환경 적용 이야기
 
[XECon2016] C-3 이현석 팀장들이 꼽은 신입 PHP 개발자가 가급적 빨리 알았으면 하는 것들
[XECon2016] C-3 이현석 팀장들이 꼽은 신입 PHP 개발자가 가급적 빨리 알았으면 하는 것들[XECon2016] C-3 이현석 팀장들이 꼽은 신입 PHP 개발자가 가급적 빨리 알았으면 하는 것들
[XECon2016] C-3 이현석 팀장들이 꼽은 신입 PHP 개발자가 가급적 빨리 알았으면 하는 것들
 
[XECon2016] C-2 홍성범 XE3 Theme 제작 - 자유롭게, 그리고 편하게
[XECon2016] C-2 홍성범 XE3 Theme 제작 - 자유롭게, 그리고 편하게[XECon2016] C-2 홍성범 XE3 Theme 제작 - 자유롭게, 그리고 편하게
[XECon2016] C-2 홍성범 XE3 Theme 제작 - 자유롭게, 그리고 편하게
 
[XECon2016] C-1 오승훈 XE3로 웹사이트 만들기
[XECon2016] C-1 오승훈 XE3로 웹사이트 만들기[XECon2016] C-1 오승훈 XE3로 웹사이트 만들기
[XECon2016] C-1 오승훈 XE3로 웹사이트 만들기
 
[XECon2016] B-4 변종원 CodeIgniter와 PHP7
[XECon2016] B-4 변종원 CodeIgniter와 PHP7[XECon2016] B-4 변종원 CodeIgniter와 PHP7
[XECon2016] B-4 변종원 CodeIgniter와 PHP7
 
[XECon2016] B-3 성기진 XE1 가지치기와 오픈소스 생태계의 미래
[XECon2016] B-3 성기진 XE1 가지치기와 오픈소스 생태계의 미래[XECon2016] B-3 성기진 XE1 가지치기와 오픈소스 생태계의 미래
[XECon2016] B-3 성기진 XE1 가지치기와 오픈소스 생태계의 미래
 
[XECon2016] B-2 정광섭 Laravel로 스타트업 기술 스택 구성하기
[XECon2016] B-2 정광섭 Laravel로 스타트업 기술 스택 구성하기[XECon2016] B-2 정광섭 Laravel로 스타트업 기술 스택 구성하기
[XECon2016] B-2 정광섭 Laravel로 스타트업 기술 스택 구성하기
 
[XECon2016] A-3 박형식 Frontend stack의 변화 : jQuery, BackboneJS, ReactJS 중심으로
[XECon2016] A-3 박형식 Frontend stack의 변화 : jQuery, BackboneJS, ReactJS 중심으로[XECon2016] A-3 박형식 Frontend stack의 변화 : jQuery, BackboneJS, ReactJS 중심으로
[XECon2016] A-3 박형식 Frontend stack의 변화 : jQuery, BackboneJS, ReactJS 중심으로
 
[XECon2016] A-2 임형주 Webpack 실무 적용전략
[XECon2016] A-2 임형주 Webpack 실무 적용전략[XECon2016] A-2 임형주 Webpack 실무 적용전략
[XECon2016] A-2 임형주 Webpack 실무 적용전략
 
[XECon2016] A-4 조정현 GitHub + Jenkins + Docker로 자동배포 시스템 구축하기
[XECon2016] A-4 조정현 GitHub + Jenkins + Docker로 자동배포 시스템 구축하기[XECon2016] A-4 조정현 GitHub + Jenkins + Docker로 자동배포 시스템 구축하기
[XECon2016] A-4 조정현 GitHub + Jenkins + Docker로 자동배포 시스템 구축하기
 
XECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHub
XECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHubXECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHub
XECon2015 :: [1-3] 김덕홍 - Git Workflow with GitHub
 
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기
XECon2015 :: [2-2] 박상현 - React로 개발하는 SPA 실무 이야기
 
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravelXECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
XECon2015 :: [2-1] 정광섭 - 처음 시작하는 laravel
 
XECon2015 :: [1-2] 이현석 - Learning Laravel
XECon2015 :: [1-2] 이현석 - Learning LaravelXECon2015 :: [1-2] 이현석 - Learning Laravel
XECon2015 :: [1-2] 이현석 - Learning Laravel
 
XECon2015 :: [3-3] 김찬희 & 전창완- 네이버 아이디 로그인 소개 및 Laravel 적용
XECon2015 :: [3-3] 김찬희 & 전창완- 네이버 아이디 로그인 소개 및 Laravel 적용XECon2015 :: [3-3] 김찬희 & 전창완- 네이버 아이디 로그인 소개 및 Laravel 적용
XECon2015 :: [3-3] 김찬희 & 전창완- 네이버 아이디 로그인 소개 및 Laravel 적용
 

XECon+PHPFest2014 발표자료 - ElasticSearch를 이용한 통합검색 구축방법 - 김훈민

  • 1. 2014.11.08 Session 3-2 XECon + PHPFest 2014 ElasticSearch를 이용한 통합검색 구축방법 @hoonmin 김훈민 NAVER LABS
  • 2. 누구세요? • 김훈민! • http://github.com/hoonmin! • 네이버 랩스에서 일합니다.! • 자바 개발자. 성능 엔지니어.! • 오픈소스 캐시 솔루션인 Arcus의 커미터 입니다.! • http://github.com/naver/arcus! • 결혼 3년차 딸바보 아빠입니다. 2
  • 5. 5
  • 6. 내가 운영하는 XE 사이트에! 통합 검색을 붙이고 싶다면? 6
  • 7. 7
  • 8. 간단한 검색 이론(?)! ! “반지”라는 단어를 포함하고 있는! 톨킨의 작품 목록을 구하려면? 8
  • 9. Grep “반지” * • 모든 작품에 대해 grep을 실행합니다.! • 해당 단어를 가진 작품을 출력합니다.! ! • 수백만 건의 문서에 대해 매번 같은 일을 한다면? Oops… 9
  • 10. 역 인덱스 (inverted index) • 모든 작품 텍스트에서 단어들을 추출하여 저장! • 각 단어에 대해, 그 단어가 포함된 작품의 id를 기 록 10 단어 작품 출현 빈도 작품 id Ring 5 1, 2, 3, 4, 5 Middle-Earth 4 1, 3, 4, 5 Gollum 4 2, 3, 4, 5
  • 13. Lucene 기반 검색엔진의 양대 산맥 13 * Solr와 ElasticSearch를 자세히 비교한 자료 http://db-engines.com/en/system/Elasticsearch%3BSolr%3BSphinx
  • 14. Google Trend 14 Lucene Solr ElasticSearch
  • 16. 특징 • Lucene! • Schema-Free (JSON)! • Distributed! • Multi-tenancy! • RESTful APIs 16
  • 17. 용어 17 ElasticSearch DBMS Index Database Document Type Table Document Row Field Column
  • 18. JSON Document {! ! "_id": "1",! ! "name": “Hoonmin Kim",! ! "birth_year": 1981,! ! "tags": ["Naver", "Arcus", "DevOps"],! ! "location" : {! ! ! "city": "용인시"! ! }! } 18
  • 19. API : Index 생성 curl -XPUT ‘localhost:9200/resume' -d '! {! ! “settings”: {! ! ! …! ! },! ! “mappings”: {! ! ! …! ! }! }' 19 인덱스 이름 인덱스 설정! (Optional)
  • 20. API : Document 추가 curl -XPUT ‘localhost:9200/resume/person/1’ -d ‘! {! ! “name”: “Hoonmin Kim”,! ! “tags”: [“Naver”, “Arcus”]! }’! ! 201 (CREATED) - 신규 생성 됨! 200 (OK) - 업데이트(reindex) 됨 20 Document Type _id
  • 21. API : Document 조회 curl -XGET ‘localhost:9200/resume/person/1’! ! ! ! {! ! “name”: “Hoonmin Kim”,! ! “tags”: [“Naver”, “Arcus”]! } 21 document type document id 인덱스! 이름
  • 22. API : Document 삭제 curl -XDELETE ‘localhost:9200/resume/person/1’! ! ! 22
  • 23. API : Multi Get curl ‘localhost:9200/resume/_mget’ -d ‘{! ! “docs” : [! ! ! {! ! ! ! “_type”: “person”,! ! ! ! “_id”: “1”! ! ! },! ! ! …! ! ]! } 23
  • 24. API : Search curl -XGET! ! ‘localhost:9200/resume/_search?q=naver’! ! { …! ! “hits”: {! ! ! “total”: 1, “max_score”: 0.15342641,! ! ! “hits”: [! ! ! ! { … }! ! ! ]! ! }! } 24
  • 25. API : Search Query DSL curl -XPOST ‘localhost:9200/resume/_search’ -d ‘! {! “query”: {! ! “bool”: {! ! ! “must”: [! ! ! ! { “match”: {“name”: “kim”} }! ! ! ]! ! }! }}’ 25
  • 26. Distributed Cluster 26 Master Node 0
  • 27. Distributed Cluster 27 Master Node 0! ! ! ! index 생성 Primary! Shard 0 Primary! Shard 1 Lucene Worker
  • 28. Distributed Cluster 28 Master Node 0! ! ! ! Primary! Shard 0 Node 1! ! ! ! Primary! Shard 1
  • 29. Distributed Cluster 29 Master Node 0! ! ! ! Primary! Shard 0 Node 1! ! ! ! Primary! Shard 1 Replica! Shard 1 Replica! Shard 0
  • 30. Distributed Cluster 30 Master Node 0! ! ! ! Primary! Shard 0 Node 1! ! ! ! Primary! Shard 1 Replica! Shard 1 Replica! Shard 0
  • 31. Distributed Cluster 31 Node 0! ! ! ! Master Primary! Shard 0 Node 1! ! ! ! Primary! Shard 1 Replica! Shard 1 Primary! Shard 0
  • 32. 데모 : XE 게시판 통합 검색 32
  • 33. 목표 • 2개의 게시판 모듈! • 게시글 약 6만 건! • 간단한 제목 + 내용 검색! • 간단한 검색 UI! ! • XE 검색 모듈 개발 (TODO) 33
  • 35. 데모 시스템 구성 35 :80 :3306 Apache MariaDB XE (PHP) docker container
  • 36. 데모 시스템 구성 36 Apache MariaDB XE (PHP) Elastic- Search JDBC plugin :3306 :9200 :80 :9300 docker container
  • 37. 데모 시스템 구성 37 Apache MariaDB XE (PHP) Elastic- Search JDBC plugin :3306 :9200 :80 :9300 docker container :80 Web UI! http-server
  • 38. ElasticSearch 설치 및 실행 • Java 런타임 필요! • 설치! • http://www.elasticsearch.org/download! • apt-get, yum! • 실행! • $ elasticsearch -d 참고: http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/setup.html 38
  • 39. 39
  • 40. 인덱스 설계 • 인덱싱 할 테이블과 컬럼을 확인! • xe_documents! • xe_modules! • xe_comments! • 원본 데이터를 어떤 형식으로 저장할 것인지 결정! • 게시글과 덧글을 구분 해야 하나?! • 주로 어떤 쿼리를 날릴 것인가? 40
  • 41. 데모 인덱스 구조 41 index document_type document xe_index document { module : { … }, article : { … }, comment : { … } }
  • 42. JDBC Plugin (1) • ElasticSearch의 플러그인 중 하나! • JDBC(Java DataBase Connectivity)! • 자바에서 DB에 접속할 수 있도록 하는 API! • DB에서 설정된 쿼리들을 실행한 결과를 변환하 여 인덱스의 문서로 저장! • https://github.com/jprante/elasticsearch-river- jdbc 42
  • 43. JDBC Plugin (2) 출처: https://github.com/jprante/elasticsearch-river-jdbc/raw/master/src/site/resources/simple-tabular-json-data.png 43
  • 44. JDBC Plugin (3) curl -XPUT elasticsearch:9200/_river/xe_index/_meta -d '{ "type": "jdbc", "jdbc": { 44 "index": "xe_index", "type": "document", "url": “jdbc:mysql://<hostname or IP>:3306/maria", "user": "maria", "password": "maria", "sql": “SELECT …” } }'
  • 45. JDBC Plugin (4) 45 SELECT d.document_srl as `_id`, d.document_srl as `article.document_srl`, ... m.mid as `module.mid`, ... c.comment_srl as `comments[comment_srl]`, ... FROM xe_documents as d INNER JOIN xe_modules as m on d.module_srl = m.module_srl INNER JOIN xe_comments as c on c.module_srl = m.module_srl AND c.document_srl = d.document_srl;
  • 46. 제목+내용 검색 curl -XPOST http://elasticsearch:9200/xe_index/document/_search -d ' { 46 "size": 10, "from": 0, "query": { "bool": { "must": [ { "match": { "article.title": "XE" }}, { "match": { "article.content": "XE" }}, { "fuzzy" : { "article.content" : "XE"}} ] } } }'
  • 47. 최신순 정렬 curl -XPOST http://elasticsearch:9200/xe_index/document/_search -d ' { 47 "size": 10, "from": 0, "query": { … }, "sort": [ { "article.regdate" : {"order" : "desc"}}, "_score" ] }'
  • 48. 정확도 순 정렬 curl -XPOST http://elasticsearch:9200/xe_index/document/_search -d ' { 48 "size": 10, "from": 0, "query": { … }, "sort": [ "_score", { "article.regdate" : {"order" : "desc"}} ] }'
  • 49. 다루지 못한 내용들 • 보안! • 쿼리 튜닝! • 다양한 쿼리와 필터를 실험! • 형태소 분석기 적용! • 한글 형태소 분석을 통해 정확한 단어를 추출! • … 49
  • 50. 감사합니다. • 발표 관련 소스 코드는 GitHub을 확인해주세요.! • http://github.com/hoonmin/xecon2014! ! • E-Mail : harebox@gmail.com! • Line : @harebox 50