7. POI 검색이란01
특정인이 관심을 가지는 현실 세계 또는 지도나 도면상의 특정위치
(1) 지도 위에 지리정보와 함께 좌표 등으로 표시되는 주요 시설물, 역, 공
항, 터미널, 호텔, 백화점 등을 표현하는 데이터
(2) Land Mark 또는 Way Point 라고도 말하여짐
POI 란
8. POI 검색이란01
특정인이 관심을 가지는 현실 세계 또는 지도나 도면상의 특정위치
지도 위에 지리정보와 함께 좌표 등으로 표시되는 주요 시설물, 역, 공항,
터미널, 호텔, 백화점 등을 표현하는 데이터
Land Mark 또는 Way Point 라고도 말하여짐
POI 란
11. Elasticsearch 를 활용한 검색 개발 경험담02
관계형 데이터베이스(RDBMS) vs Elasticsearch
RDBMS Elasticsearch
데이터 저장 방식
색인
(Indexing)
역색인
(Inverted-Indexing)
전문(Full-Text)검색 속도 느림 빠름
의미검색 불가능 가능
JOIN 가능
제한적 가능
(사전정의必)
수정/삭제 빠름 느림
12. Elasticsearch 를 활용한 검색 개발 경험담02
역색인으로 빠른
전문 검색
(Full Text Search) 가능
INVERTED INDEX
&
FULL TEXT SEARCH
VARIOUS ANALYZER
SCALABILITY
&
AVAILABILITY
OPEN SOURCE
다양한 형태소 분석을 통한
자연어 처리 및 의미검색 가
능
샤드(Shard) 단위의 데이터
분산 구성
루씬(Lucene)기반
아파치 라이선스
왜 Elasticsearch 인가
13. Elasticsearch 를 활용한 검색 개발 경험담02
Term Document
TQ
(Term
Quantity)
엘라스틱서치 doc1 1
역색인 doc1 1
데이터 doc1, doc2 2
Document Context
doc1
엘라스틱서치는 데이
터를 역색인하여 저장
하는 검색엔진이다
doc2
관계형 데이터베이스
는 데이터를 통합 관리
하는 데이터 집합이다.
…
[ RDBMS 데이터 저장 ] [ Elasticsearch 데이터 저장 ]
Inverted index &
Full text search
14. Elasticsearch 를 활용한 검색 개발 경험담02
“select * from tablename where context like '%데이터%‘’
Term Document
TQ(Term
Qqu
엘라스틱서치 doc1 1
역색인 doc1 1
데이터 doc1, doc2 2
Document Context
doc1
엘라스틱서치는 데이
터를 역색인하여 저장
하는 검색엔진이다
doc2
관계형 데이터베이스
는 데이터를 통합 관리
하는 데이터 집합이다.
…
Inverted index &
Full text search
15. Elasticsearch 를 활용한 검색 개발 경험담02
“select * from tablename where context like '%의정부% OR context
like '%원조% OR context like '%맛집% OR context like '%부대%
context like ‘%찌개% ‘’
Term Document
TQ(Term
Qqu
의정부 doc1 1
경기도 doc1 1
맛집 doc1, doc2 2
Document Context
doc1
경기도 의정부는 맛집
이 많기로 유명하다
doc2
진정한 맛집을 찾기란
하늘의 별따기
…
Inverted index &
Full text search
16. Elasticsearch 를 활용한 검색 개발 경험담02
Multi Language Tokenizer
Lowercase Filter
Jamo Filter
Chosung Filter
Index Analyzer
Multi Language Tokenizer
Relative (sysnonym 등)
..
…
Search Analyzer
Searchable
Document
입력 data 검색어
① INDEX ② QUERY
Various Analyzer
17. Elasticsearch 를 활용한 검색 개발 경험담02
Multi Language Tokenizer
Lowercase Filter
Jamo Filter
Chosung Filter
Index Analyzer
Multi Language Tokenizer
Relative (sysnonym 등)
(ex. 개발자 = developer)
…
Search Analyzer
Searchable
Document
입력 data 검색어
① INDEX ② QUERY
SW(En) / 개발자(Ko) / 컨퍼런스(Ko)
↓
SW(En) / sw(En) / 개발자(Ko) / 컨퍼런스(Ko)
↓
SW(En) / sw(En) / 개발자(Ko) / 컨퍼런스(Ko) /
ㄱㅐㅂㅏㄹㅈㅏㅋㅓㄴㅍㅓㄹㅓㄴㅅㅡ
↓
SW(En) / sw(En) / 개발자(Ko) / 컨퍼런스(Ko) /
ㄱㅐㅂㅏㄹㅈㅏㅋㅓㄴㅍㅓㄹㅓㄴㅅㅡ/ㄱㅂㄹㅋㅍ
ㄹㅅ
sw(En) / developer(En) / 컨퍼런스(Ko)
↓
sw(En) / 소프트웨어 / developer(En) / 개
발자(Ko) / 컨퍼런스(Ko)
“SW개발자컨퍼런스” “sw developer 컨퍼런
스”
Various Analyzer
18. Elasticsearch 를 활용한 검색 개발 경험담02
Multi Language Tokenizer
Lowercase Filter
Jamo Filter
Chosung Filter
Index Analyzer
Multi Language Tokenizer
Relative (sysnonym 등)
..
…
Search Analyzer
Searchable
Document
입력 data 검색어
① INDEX ② QUERY
SW(En) / 개발자(Ko) / 컨퍼런스(Ko)
↓
SW(En) / sw(En) / 개발자(Ko) / 컨퍼런스(Ko)
↓
SW(En) / sw(En) / 개발자(Ko) / 컨퍼런스(Ko) /
ㄱㅐㅂㅏㄹㅈㅏㅋㅓㄴㅍㅓㄹㅓㄴㅅㅡ
↓
SW(En) / sw(En) / 개발자(Ko) / 컨퍼런스(Ko) /
ㄱㅐㅂㅏㄹㅈㅏㅋㅓㄴㅍㅓㄹㅓㄴㅅㅡ/ㄱㅂㄹㅋㅍ
ㄽ
“SW개발자컨퍼런스” “sw developer 컨퍼런
스”
sw(En) / developer(En) / 컨퍼런스(Ko)
↓
sw(En) / developer(En) / 컨퍼런스(Ko) /
소프트웨어 / 개발자
Various Analyzer
22. Elasticsearch 를 활용한 검색 개발 경험담
POI 검색 개발기 #1. 한글 검색
02
아버지가방에들어가신다
대학생선교회
동시흥분기점
23. Elasticsearch 를 활용한 검색 개발 경험담
POI 검색 개발기 #1. 한글 검색
02
• 아버지가방에들어가신다
• 아버지 / 방 / 들어가다
• 아버지 / 가방 / 들어가다
• 대학생선교회
• 대학생 / 선교 / 회
• 대학 / 생선 / 교회
• 동시흥분기점
• 동시 / 흥분 / 기점
• 동시흥 / 분기점
24. Elasticsearch 를 활용한 검색 개발 경험담
POI 검색 개발기 #1. 한글 검색
02
• 한글 형태소 분석기 : open-Korean-text
25. Elasticsearch 를 활용한 검색 개발 경험담
POI 검색 개발기 #1. 한글 검색
02
• 한글 형태소 분석기 : open-Korean-text
Word Customize Performance License
26. Elasticsearch 를 활용한 검색 개발 경험담
POI 검색 개발기 #1. 한글 검색
02
• 한글 형태소 분석기 : open-Korean-text
Multi-Language
초성 검색
Romanize
사전 Customizing
Chunk (/&.) 수정
확률 기반 tokenizing
28. Elasticsearch 를 활용한 검색 개발 경험담
POI 검색 개발기 #2. 검색 적절성
02
검색어 인입 Tokenizing
3 STEP
전처리 및
Term 의미분석
2 STEP1 STEP 4 STEP
검색어
Pattern 분석
5 STEP
Query 생성
6 STEP
질의
7 STEP
결과 후 처리
29. Elasticsearch 를 활용한 검색 개발 경험담
POI 검색 개발기 #2. 검색 적절성
02
검색어 인입 Tokenizing
3 STEP
전처리 및
Term 의미분석
2 STEP1 STEP 4 STEP
검색어
Pattern 분석
5 STEP
Query 생성
6 STEP
질의
7 STEP
결과 후 처리
30. Elasticsearch 를 활용한 검색 개발 경험담
POI 검색 개발기 #2. 검색 적절성
02
Case 1. 다중적 의미를 가진 검색어
“동대문곱창”
31. Elasticsearch 를 활용한 검색 개발 경험담
POI 검색 개발기 #2. 검색 적절성
02
Case 1. 다중적 의미를 가진 검색어
“동대문곱창”
동대문(흥인지문)
근처
곱창집??
“동대문곱창”
상호명을 가진
곱창집??
동대문구
소재
곱창집??
32. Elasticsearch 를 활용한 검색 개발 경험담
POI 검색 개발기 #2. 검색 적절성
02
Case 1. 다중적 의미를 가진 검색어
>> 대상선정
“동대문곱창” 지역 && 카테고리
명칭 || 별칭
33. Elasticsearch 를 활용한 검색 개발 경험담
POI 검색 개발기 #2. 검색 적절성
02
Case 1. 다중적 의미를 가진 검색어
>> 순위 조정
“동대문곱창” POI RANK
||
거리
34. Elasticsearch 를 활용한 검색 개발 경험담
POI 검색 개발기 #2. 검색 적절성
02
Case 2. 랜드마크 검색어
>> 부속 POI가 많은 랜드마크
“인천국제공항”
35. Elasticsearch 를 활용한 검색 개발 경험담
POI 검색 개발기 #2. 검색 적절성
02
Case 3. 랜드마크 검색어
>> 부속 POI가 많은 랜드마크
인천공항 제2터미널
및
부속 POI(15개)
인천공항 제1터미널
및
부속 POI (25개)
36. Elasticsearch 를 활용한 검색 개발 경험담
POI 검색 개발기 #2. 검색 적절성
02
Case 2. 랜드마크 검색어
>> 부속 POI가 많은 랜드마크
인천공항 제2터미널
및
부속 POI(15개)
인천공항 제1터미널
및
부속 POI (25개)
자동차로 간다면?
37. Elasticsearch 를 활용한 검색 개발 경험담
POI 검색 개발기 #2. 검색 적절성
02
Case 2. 랜드마크 검색어
>> 부속 POI가 많은 랜드마크
인천공항 제2터미널
및
부속 주차장 POI(11개)
인천공항 제1터미널
및
부속 POI (25개)
자동차로 간다면?
인천국제공항제2여객터미널장기주차장
인천국제공항제2여객터미널서편단기주차장
…..
..
38. Elasticsearch 를 활용한 검색 개발 경험담
POI 검색 개발기 #2. 검색 적절성
02
Case 2. 랜드마크 검색어
>> 부속 POI가 많은 랜드마크
인천공항 제2터미널
및
부속 주차장 POI(11개)
인천공항 제1터미널
및
부속 POI (25개)
자동차로 간다면?
인천국제공항제2여객터미널장기주차장
인천국제공항제2여객터미널서편단기주차장
…..
..
SQL로 질의를 한다면 .. ?
39. Elasticsearch 를 활용한 검색 개발 경험담
POI 검색 개발기 #2. 검색 적절성
02
Case 2. 랜드마크 검색어
>> 부속 POI가 많은 랜드마크
ES query
• 분산 된 데이터(shard) 전문 검색
• Merge 시점, score로 정렬
• 세부 조건을 query level 조정
인천공항 제1터미널 Score 12
• 인천공항 제1터미널 장기 주차장 Score 11.8
• 인천공항 제1터미널 단기 주차장 Score 11.8
…
인천공항 제2터미널 Score 10
• 인천공항 제2터미널 장기 주차장 Score 9.8
• 인천공항 제2터미널 단기 주차장 Score 9.8
…
인천공항 제1터미널 정부합동청사 Score 6
인천국제공항제2여객터미널주차대행접수장 Score
5.7
…
40. Elasticsearch 를 활용한 검색 개발 경험담
POI 검색 개발기 #2. 검색 적절성
02
Case 3. 맛집 검색어
“강남역맛집”
41. Elasticsearch 를 활용한 검색 개발 경험담
POI 검색 개발기 #2. 검색 적절성
02
Case 3. 맛집 검색어
“강남역맛집”
42. Elasticsearch 를 활용한 검색 개발 경험담
POI 검색 개발기 #2. 검색 적절성
02
Case 3. 맛집 검색어
>> 대상선정
강남역 주변
“강남역맛집”
=
“강남역 근처 인
기있는 음식점”
음식점 카테고리
||
명칭
43. Elasticsearch 를 활용한 검색 개발 경험담
POI 검색 개발기 #2. 검색 적절성
02
Case 3. 맛집 검색어
>> 순위 조정
거리 || POI RANK
맛집 방송 정보 || 맛집 평가 데이터
“강남역맛집”
=
“강남역 근처 인
기있는 음식점”
45. Elasticsearch 를 활용한 검색 개발 경험담
POI 검색 개발기 #3. 실시간 정보 검색
02
지금 사용 가능한 충전기가 있는 전기차 충전소만
검색하려면..?
46. Elasticsearch 를 활용한 검색 개발 경험담
POI 검색 개발기 #3. 실시간 정보 검색
02
RDBMS Elasticsearch
데이터 저장 방식 정규화(Inverted)
역정규화(Reverse-
Inverted)
전문(Full-Text)검색 속
도
느림 빠름
의미검색 불가능 가능
JOIN 가능
제한적 가능
(사전정의必)
수정/삭제 빠름 느림
51. Elasticsearch 를 활용한 검색 개발 경험담
POI 검색 개발기 #3. 실시간 정보 검색
02
ES –REDIS 플러그인 개발
>> redis key – values >> es filter query
52. Elasticsearch 를 활용한 검색 개발 경험담
POI 검색 개발기 #3. 실시간 정보 검색
02
ES –REDIS 플러그인 개발
>> redis key – values >> es filter query
...
a1, a3, a4, a6, b2, e2
Search “available”
54. 검색 서비스의 미래03
“스키장 있어”
#1. 서술형 검색어 지원
“진관사 가보자”“나노캠텍 다음 휴게소”
“제일 가까운 바닷가”
“동대구역으로”
“해돋이 좋은 장소” “교동리 데려다줘”
“진흥아파트지하에 탁구장 팔육아시안파크”
“다음 다음 휴게소”
“가장 가까운 휴게소”
“맛집 추천”
“경로상 맛집”
“가까운 찻집”
55. 검색 서비스의 미래03
#2. 검색 추천 : 사용자 패턴 분석을 통한 검색어 추천
USER ACTION
POI 정보 시간
날씨 정보 실시간 교통정보
56. 주변 맛집
카테고리(메뉴) 맛집 정보
이가네양꼬치
중식
(양꼬치)
망고플레이트
★★★★
PLUSABLE
(플러스에이블)
주점
(돈가스덮밥,수제맥주)
식신로드
망고플레이트
★★★
우촌
한식
(한우생등심,평양냉면)
생활의달인 방영
온담
국수전문
(얼큰칼국수,김치찌개)
생생정보통신 방
영
양재해장국
한식
(해장국,감자탕)
망고플레이트
★★★★
제주흑다돈
(양재직영점)
한식
(오겹살,가브리살)
그린실버고향이
좋다 방영
진대감
(양재점)
한식
식객남녀잘먹었
습니다 방영
우판대감
한식
(전복갈비탕)
생생정보통신 방
영
+ )