SlideShare a Scribd company logo
2018. 4 (기준)
최일규 (ilkyu.choi@gmail.com)
Elasticsearch 검색개발
Lucene
Elasticsearch
Lucene은 확장 가능한 고성능
정보검색(IR, Information
Retrieval) 라이브러리이다.
Elasticsearch는 확장성이 뛰어난 Apache Lucene 프로젝
트에 기반을 둔 오픈소스 풀텍스트 검색 및 분석엔진입니다.
Elasticsearch 란?
- JSON document
- RESTful APIs
- Distributed
- Multi-tenancy
- Near Real Time
속도1
2
3
랭킹
자연어 검색
검색엔진 필요성
데이터 원본 정제 색인 평가
RDBMS
OPEN-API
제휴DB
크롤링
자체생산
활용
데이터 (비)정규화
맵핑구조
데이터 클렌징
Logstash
Bulk API
기타
Precision/Recall
Explain
Index Time
Query Time
웹서비스
모바일 서비스
기타
1 2 3 4 5
검색서비스 개발과정
1. Term : 분석과정을 거치고 저장된 토큰의 최소단위를 텀(Term)이라고 한다.
2. Inverted Index : * 대용량 텍스트 검색을 위해 고안된 자료구조
Term Doc 1 Doc 2 Doc 3 출현빈도
quick O O O 3
brown O 1
예) “Quick brown”
주요용어 및 개념
1. 쿼리(Query)와 필터(Filter)
구분 쿼리(Query) 필터(Filter)
검색대상 전문검색(Full Text) 바이너리 구분(Y/N)
점수계산 O X
캐싱 X O
응답속도(성능) 느림 빠름
2. 쿼리와 필터 비교
• 엘라스틱서치에서 데이터를 찾고 구분하는 기능은 쿼리와 필터로 나뉨
• 쿼리와 필터는 모두 JSON형의 QueryDSL로 표현한다.
• 필터는 문서의 수를 줄이는데 목표로 한다.
주요용어 및 개념
1. 정확율(precision), 재현율(recall)
: 정보검색을 평가하는데 이용되는 지표
> 정확율 : 검색된 정보가 얼마나 적합하고 관련있는 문서의 비율
> 재현율 : 관련있는 문서들 중 실제로 검색된 문서의 비율
예) 대학생선교회, 대학생선교회
주요용어 및 개념
1. 이음 동의어 (Synonyms)
2. 연관어
단어 동의어(유의어)
초등학생 초딩, 초등생
파리바게트 빠리바게트, 파리바게뜨
콘크리트 공구리
휴대폰 휴대전화, 핸드폰
단어 연관어
문재인 100대 국정과제
빅뱅 지드래곤, 태양
이선희 히든싱어 시즌3
주요용어 및 개념
1. RDBMS VS Elasticsearch
RDBMS Elasticsearch
Database Index
Table Type (ES 7.0 deprecated)
Row Document
Column Field
Schema Mapping
SQL Query DSL
RDBMS와 데이터 구조 비교
1. TF (Term Frequency)
- 한 문서에서 같은 검색어(term)가 많이 나타날수록 높은점수 부여
2. IDF (Inverse Document Frequency)
- 해당term이 전체 Document set에 얼마나 나왔는지 측정
- 흔한 단어일수록 idf가 낮아지고 찾아보기 힘든 단어일수록 idf 높아짐
3. COORD (Coordination factor)
- 검색질의가 여러 개의 term으로 이루어졌을경우 문서에서 매치되는 term 개수가
많을수록 높은점수 부여
4. lengthNorm
- term이 크기가 작은 필드에서 출현할 수록 높은점수 부여
5. Query Time Boosting
Scoring 계산
Cluster
Master Node Data Node Data Node
0
3
4 2
1
3 1
4
2
0
Shard (데이터 검색단위 인스턴스)
Replica (샤드의 복사본)
Primary shard
Replica shard
인덱스 생성 또는 삭제
노드추적, 클러스터에 할당할 샤드결정
및 클러스터 상태관리
실제 데이터가 저장되는 노드
CRUD, 검색 및 집계와 같은 데이터
관련 작업수행
Elasticsearch 아키텍처
Cluster
Node1 Node2
0
3
2 2
1
3
0
9200 9201
9300
9301
1
9200번 부터 REST-API를 위한 HTTP통신포트 할당
9300번 부터 노드간 바인딩을 위한 포트로 할당
같은 클러스터 이름을 가지고
실행된 노드는 자동으로 바인딩
노드바인딩
Analyzer
1개
Tokenizer
N개
TokenFilter= +
CharFilter
HTMLStripper
Tokenizer
Standard
Input
TokenFilter
Stopwords
TokenFilter
Lowercase
Index Terms
“<p>The quick brown Fox Jumps over the Lazy dog</p>”
“The quick brown Fox Jumps over the Lazy dog”
[“The”, “quick”, “brown”, “Fox”, “Jumps”, “over”, “the”, “Lazy”, “dog”]
[“quick”, “brown”, “Fox”,
“Jumps”, “over”, “Lazy”, “dog”]
[“quick”, “brown”, “fox”,
“jumps”, “over”, “lazy”, “dog”]
Analyzer란?
Standard Analyzer
Built-in Analyzer
Custom Analyzer
Simple Analyzer Keyword Analyzer
Whitespace
Analyzer
Pattern Analyzer
한글형태소
자동완성
(suggest)
Elasticsearch Analyzer 유형
Settings
(Dynamic | Explicit)
Mappings
PUT /{_index}
{
“settings”: {
“index”: {
“number_of_shards”: 5,
“number_of_replicas”: 2,
“analysis”: {
“analyzer”: {},
“tokenizer”: {},
“char_filter”: {},
“filer”: {}
}
}
}
}
PUT /{_index}
{
“mappings”: {
“type1”: {
“properties”: {
“field1”: {
“type”: “text”
}
}
}
}
}
Create Document
POST /{_index}/{_type}
{
“field1”: “Hello Elasticsearch”
}
+
Index생성 및 Document생성
1. Term Query
POST _search
{
"query": {
"term" : {
"user" : “피부"
}
}
}
2. Match Query
POST _search
{
"query": {
“match" : {
"user" : “피부 특성"
}
}
}
QueryDSL
3. Filtered Query
GET _search
{
"query": {
"bool": {
"must": {
"match": {
"text": “보닌 화장품“
}
},
"filter": {
"term": {
“gender": “M“
}
}
}
}
}
QueryDSL
4. Range Query
POST _search
{
“query”: {
“range” : {
“age”: {
“gte”: 10,
“lte”: 20
}
}
}
}
5. Sort
POST _search
{
“query”: {
“match” : {
“title”: “피부”
}
},
"sort": {
“_score”: {
“order”: “desc”
}
“regDate”: {
“order”: “desc”
}
}
}
QueryDSL
자동완성(Suggest) 사례
Indexing 아버지=
ㅇㅏㅂㅓㅈㅣ ㅇㅂㅈ
Query Prefix Query=
Suggest (Prefix 방식)
Indexing
아버지
=
ㅇ ㅇ
Query Match Query=
ㅇㅏ ㅇㅂ
ㅇㅏㅂ ㅇㅂㅈ
Suggest (Edge n-Gram 방식)
https://github.com/netcrazy/elasticsearch-jaso-analyzer
자동완성(Suggest) 개발사례
{
"settings": {
"analysis": {
"filter": {
"my_stop": {
"type": "stop",
"stopwords": ["and", "is", “the"]
}
}
}
}
}
1. 불용어 처리
2. 동의어 처리
https://www.elastic.co/guide/en/elasticsearch/reference/current/a
nalysis-synonym-tokenfilter.html
전치사, 조사, 관서, 접속사 등과 같이 주제색인어로서 의미가 없는 단어
기타
A사이트
A사이트 검색품질 개선사례 Case1 (1/2)
Query DSLSettings
Mappings
A사이트 검색품질 개선사례 Case1 (2/2)
크롤링
수집
국내뉴스 단어별
정제작업 키워드 저장소
Daily 정제 에이전트 수행Daily 크롤러 에이전트 수행
수집 및 저장
집계(Aggregation) 쿼리
A사이트
A사이트 활용사례 Case2
1. 추천시스템
MoreLikeThis
기타 활용사례 Case3 (1/2)
1. MoreLikeThis
QueryDSL
Response
기타 활용사례 Case3 (2/2)
감사합니다.

More Related Content

PDF
Elasticsearch
PDF
Trino: A Ludicrously Fast Query Engine - Pulsar Summit NA 2021
PDF
Log analysis with the elk stack
PPTX
Elastic Stack Introduction
PDF
Introduction to elasticsearch
PPTX
ELK Elasticsearch Logstash and Kibana Stack for Log Management
PPTX
elasticsearch_적용 및 활용_정리
PDF
ELK introduction
Elasticsearch
Trino: A Ludicrously Fast Query Engine - Pulsar Summit NA 2021
Log analysis with the elk stack
Elastic Stack Introduction
Introduction to elasticsearch
ELK Elasticsearch Logstash and Kibana Stack for Log Management
elasticsearch_적용 및 활용_정리
ELK introduction

What's hot (20)

PPTX
An Introduction to Elastic Search.
PPTX
Introduction to Elasticsearch with basics of Lucene
PPTX
The Elastic ELK Stack
PDF
When apache pulsar meets apache flink
PDF
Apache kafka 모니터링을 위한 Metrics 이해 및 최적화 방안
PDF
[215]네이버콘텐츠통계서비스소개 김기영
PPTX
Elastic search overview
PDF
Accelerating Data Ingestion with Databricks Autoloader
PPTX
Elastic - ELK, Logstash & Kibana
PDF
A Thorough Comparison of Delta Lake, Iceberg and Hudi
PPTX
Log management with ELK
PDF
Apache Iceberg - A Table Format for Hige Analytic Datasets
ODP
Deep Dive Into Elasticsearch
PPTX
Elastic stack Presentation
PPTX
Presto: SQL-on-anything
PPTX
PPT
Solr and Elasticsearch, a performance study
PDF
Alfresco DevCon 2019: Encryption at-rest and in-transit
PDF
Ray: Enterprise-Grade, Distributed Python
PPTX
Hive: Loading Data
An Introduction to Elastic Search.
Introduction to Elasticsearch with basics of Lucene
The Elastic ELK Stack
When apache pulsar meets apache flink
Apache kafka 모니터링을 위한 Metrics 이해 및 최적화 방안
[215]네이버콘텐츠통계서비스소개 김기영
Elastic search overview
Accelerating Data Ingestion with Databricks Autoloader
Elastic - ELK, Logstash & Kibana
A Thorough Comparison of Delta Lake, Iceberg and Hudi
Log management with ELK
Apache Iceberg - A Table Format for Hige Analytic Datasets
Deep Dive Into Elasticsearch
Elastic stack Presentation
Presto: SQL-on-anything
Solr and Elasticsearch, a performance study
Alfresco DevCon 2019: Encryption at-rest and in-transit
Ray: Enterprise-Grade, Distributed Python
Hive: Loading Data
Ad

Similar to Elasticsearch development case (20)

PPTX
elasticsearch
PDF
Ch1 일래스틱서치 클러스터 시작
PPTX
검색엔진이 데이터를 다루는 법 김종민
PDF
Elasticsearch 엘라스틱서치 (검색서비스) 에 대해 알아보자.txt
PPTX
Elastic Search Performance Optimization - Deview 2014
PDF
정보검색과 Elasticsearch (크몽)
PDF
Elastic Search (엘라스틱서치) 입문
PDF
제 17회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [중고책나라] : 실시간 데이터를 이용한 Elasticsearch 클러스터 최적화
PDF
엘라스틱서치, 로그스태시, 키바나
PPTX
20151022 elasticsearch 적용및활용_송준이_sds발표용
PPTX
Fundamental of ELK Stack
PDF
Elasticsearch server Chapter5
PPTX
차곡차곡 쉽게 알아가는 Elasticsearch와 Node.js
PDF
Elasticsearch를 활용한 GIS 검색
PDF
XECon+PHPFest2014 발표자료 - ElasticSearch를 이용한 통합검색 구축방법 - 김훈민
PDF
Web Analytics at Scale with Elasticsearch @ naver.com - Part 2 - Lessons Learned
PDF
일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항
PDF
Elastic Stack & Data pipeline (1장)
PPTX
Logstash, ElasticSearch, Kibana
PPTX
엘라스틱서치 이해하기 20160612
elasticsearch
Ch1 일래스틱서치 클러스터 시작
검색엔진이 데이터를 다루는 법 김종민
Elasticsearch 엘라스틱서치 (검색서비스) 에 대해 알아보자.txt
Elastic Search Performance Optimization - Deview 2014
정보검색과 Elasticsearch (크몽)
Elastic Search (엘라스틱서치) 입문
제 17회 보아즈(BOAZ) 빅데이터 컨퍼런스 - [중고책나라] : 실시간 데이터를 이용한 Elasticsearch 클러스터 최적화
엘라스틱서치, 로그스태시, 키바나
20151022 elasticsearch 적용및활용_송준이_sds발표용
Fundamental of ELK Stack
Elasticsearch server Chapter5
차곡차곡 쉽게 알아가는 Elasticsearch와 Node.js
Elasticsearch를 활용한 GIS 검색
XECon+PHPFest2014 발표자료 - ElasticSearch를 이용한 통합검색 구축방법 - 김훈민
Web Analytics at Scale with Elasticsearch @ naver.com - Part 2 - Lessons Learned
일래스틱 서치 ch7. 일래스틱 서치 클러스터 세부사항
Elastic Stack & Data pipeline (1장)
Logstash, ElasticSearch, Kibana
엘라스틱서치 이해하기 20160612
Ad

Elasticsearch development case

  • 1. 2018. 4 (기준) 최일규 (ilkyu.choi@gmail.com) Elasticsearch 검색개발
  • 2. Lucene Elasticsearch Lucene은 확장 가능한 고성능 정보검색(IR, Information Retrieval) 라이브러리이다. Elasticsearch는 확장성이 뛰어난 Apache Lucene 프로젝 트에 기반을 둔 오픈소스 풀텍스트 검색 및 분석엔진입니다. Elasticsearch 란? - JSON document - RESTful APIs - Distributed - Multi-tenancy - Near Real Time
  • 4. 데이터 원본 정제 색인 평가 RDBMS OPEN-API 제휴DB 크롤링 자체생산 활용 데이터 (비)정규화 맵핑구조 데이터 클렌징 Logstash Bulk API 기타 Precision/Recall Explain Index Time Query Time 웹서비스 모바일 서비스 기타 1 2 3 4 5 검색서비스 개발과정
  • 5. 1. Term : 분석과정을 거치고 저장된 토큰의 최소단위를 텀(Term)이라고 한다. 2. Inverted Index : * 대용량 텍스트 검색을 위해 고안된 자료구조 Term Doc 1 Doc 2 Doc 3 출현빈도 quick O O O 3 brown O 1 예) “Quick brown” 주요용어 및 개념
  • 6. 1. 쿼리(Query)와 필터(Filter) 구분 쿼리(Query) 필터(Filter) 검색대상 전문검색(Full Text) 바이너리 구분(Y/N) 점수계산 O X 캐싱 X O 응답속도(성능) 느림 빠름 2. 쿼리와 필터 비교 • 엘라스틱서치에서 데이터를 찾고 구분하는 기능은 쿼리와 필터로 나뉨 • 쿼리와 필터는 모두 JSON형의 QueryDSL로 표현한다. • 필터는 문서의 수를 줄이는데 목표로 한다. 주요용어 및 개념
  • 7. 1. 정확율(precision), 재현율(recall) : 정보검색을 평가하는데 이용되는 지표 > 정확율 : 검색된 정보가 얼마나 적합하고 관련있는 문서의 비율 > 재현율 : 관련있는 문서들 중 실제로 검색된 문서의 비율 예) 대학생선교회, 대학생선교회 주요용어 및 개념
  • 8. 1. 이음 동의어 (Synonyms) 2. 연관어 단어 동의어(유의어) 초등학생 초딩, 초등생 파리바게트 빠리바게트, 파리바게뜨 콘크리트 공구리 휴대폰 휴대전화, 핸드폰 단어 연관어 문재인 100대 국정과제 빅뱅 지드래곤, 태양 이선희 히든싱어 시즌3 주요용어 및 개념
  • 9. 1. RDBMS VS Elasticsearch RDBMS Elasticsearch Database Index Table Type (ES 7.0 deprecated) Row Document Column Field Schema Mapping SQL Query DSL RDBMS와 데이터 구조 비교
  • 10. 1. TF (Term Frequency) - 한 문서에서 같은 검색어(term)가 많이 나타날수록 높은점수 부여 2. IDF (Inverse Document Frequency) - 해당term이 전체 Document set에 얼마나 나왔는지 측정 - 흔한 단어일수록 idf가 낮아지고 찾아보기 힘든 단어일수록 idf 높아짐 3. COORD (Coordination factor) - 검색질의가 여러 개의 term으로 이루어졌을경우 문서에서 매치되는 term 개수가 많을수록 높은점수 부여 4. lengthNorm - term이 크기가 작은 필드에서 출현할 수록 높은점수 부여 5. Query Time Boosting Scoring 계산
  • 11. Cluster Master Node Data Node Data Node 0 3 4 2 1 3 1 4 2 0 Shard (데이터 검색단위 인스턴스) Replica (샤드의 복사본) Primary shard Replica shard 인덱스 생성 또는 삭제 노드추적, 클러스터에 할당할 샤드결정 및 클러스터 상태관리 실제 데이터가 저장되는 노드 CRUD, 검색 및 집계와 같은 데이터 관련 작업수행 Elasticsearch 아키텍처
  • 12. Cluster Node1 Node2 0 3 2 2 1 3 0 9200 9201 9300 9301 1 9200번 부터 REST-API를 위한 HTTP통신포트 할당 9300번 부터 노드간 바인딩을 위한 포트로 할당 같은 클러스터 이름을 가지고 실행된 노드는 자동으로 바인딩 노드바인딩
  • 13. Analyzer 1개 Tokenizer N개 TokenFilter= + CharFilter HTMLStripper Tokenizer Standard Input TokenFilter Stopwords TokenFilter Lowercase Index Terms “<p>The quick brown Fox Jumps over the Lazy dog</p>” “The quick brown Fox Jumps over the Lazy dog” [“The”, “quick”, “brown”, “Fox”, “Jumps”, “over”, “the”, “Lazy”, “dog”] [“quick”, “brown”, “Fox”, “Jumps”, “over”, “Lazy”, “dog”] [“quick”, “brown”, “fox”, “jumps”, “over”, “lazy”, “dog”] Analyzer란?
  • 14. Standard Analyzer Built-in Analyzer Custom Analyzer Simple Analyzer Keyword Analyzer Whitespace Analyzer Pattern Analyzer 한글형태소 자동완성 (suggest) Elasticsearch Analyzer 유형
  • 15. Settings (Dynamic | Explicit) Mappings PUT /{_index} { “settings”: { “index”: { “number_of_shards”: 5, “number_of_replicas”: 2, “analysis”: { “analyzer”: {}, “tokenizer”: {}, “char_filter”: {}, “filer”: {} } } } } PUT /{_index} { “mappings”: { “type1”: { “properties”: { “field1”: { “type”: “text” } } } } } Create Document POST /{_index}/{_type} { “field1”: “Hello Elasticsearch” } + Index생성 및 Document생성
  • 16. 1. Term Query POST _search { "query": { "term" : { "user" : “피부" } } } 2. Match Query POST _search { "query": { “match" : { "user" : “피부 특성" } } } QueryDSL
  • 17. 3. Filtered Query GET _search { "query": { "bool": { "must": { "match": { "text": “보닌 화장품“ } }, "filter": { "term": { “gender": “M“ } } } } } QueryDSL
  • 18. 4. Range Query POST _search { “query”: { “range” : { “age”: { “gte”: 10, “lte”: 20 } } } } 5. Sort POST _search { “query”: { “match” : { “title”: “피부” } }, "sort": { “_score”: { “order”: “desc” } “regDate”: { “order”: “desc” } } } QueryDSL
  • 20. Indexing 아버지= ㅇㅏㅂㅓㅈㅣ ㅇㅂㅈ Query Prefix Query= Suggest (Prefix 방식)
  • 21. Indexing 아버지 = ㅇ ㅇ Query Match Query= ㅇㅏ ㅇㅂ ㅇㅏㅂ ㅇㅂㅈ Suggest (Edge n-Gram 방식)
  • 23. { "settings": { "analysis": { "filter": { "my_stop": { "type": "stop", "stopwords": ["and", "is", “the"] } } } } } 1. 불용어 처리 2. 동의어 처리 https://www.elastic.co/guide/en/elasticsearch/reference/current/a nalysis-synonym-tokenfilter.html 전치사, 조사, 관서, 접속사 등과 같이 주제색인어로서 의미가 없는 단어 기타
  • 26. 크롤링 수집 국내뉴스 단어별 정제작업 키워드 저장소 Daily 정제 에이전트 수행Daily 크롤러 에이전트 수행 수집 및 저장 집계(Aggregation) 쿼리 A사이트 A사이트 활용사례 Case2