엘라스틱 서치 세미나
- 5. 엘라스틱 서치란
노드
엘라스틱 서치를 구성하는 하나의 프로세스 단위
다수의 샤드로 구성됨
같은 클러스터 명을 가지면 자동으로 바인딩 됨
노드마다 역할을 나눌 수 있으며, 역할에는 master, data, ingest, tribe가 있다.
마스터 노드에 문제가 생기면 다른 노드가 그 역할을 대신 한다.
- 6. 엘라스틱 서치란
샤드, 레플리카
샤드는 데이터 검색의 단위 인스턴스이다.
기본적으로 하나의 index는 5개의 샤드를 가진다.
5개의 샤드는 Primary 샤드가 되서 index를 나눠 가진다.
Primary 샤드에 문제가 생기면 레플리카 샤드가 자리를 대신한다.
Primaty 샤드와 레플리카 샤드는 절대 같은 노드에 존재 하지 않는다.
get, search 시 index에 속한 샤드들이 분산 처리 한다.
- 8. 엘라스틱 서치 특징
아파치 Lucene(루씬)
자바로 개발된 검색 라이브러리
(최신 엘라스틱 서치에서는 1.8버전을 사용)
엘라스틱 서치, 솔라등에 기반이 됨
- 9. 엘라스틱 서치 특징
실시간 분석
저장된 데이터는 별도의 재시작이나 상태의 갱신이 필요 없이
색인 작업이 완료되면 바로 검색에 이용된다.
분산 시스템
여러 개의 노드로 구성됨.
시스템의 규모가 커지면 새 노드를 연결해 확장 할 수 있음.
- 11. 엘라스틱 서치 특징
RESTful API, JSON
모든 데이터 통신은 RESTful API와 JSON으로 이루어짐.
PAINLESS 라는 스크립트를 통해 쿼리에 간단한 제어구조를 만들 수 있음.
- 19. ��라스틱 서치 불편한 점
매핑 변경 불가.
한번 정해진 매핑은 추가, 변경, 삭제가 불가 하다.
공식 문서에서도 꼼수를 제공하지만 실제 매핑이 변경되는 것은 아니다.
Mysql에서 컬럼의 자료형을 추가, 삭제 하거나 자료형을 자유자재로
변경 하는 것 처럼 할 수 없다.
- 20. 엘라스틱 서치 불편한 점
Nested Field에 직접 쿼리 불가
하이라이트 된 부분이 Nested Field.
Comment에 대한 쿼리는 단독으로 수행 할 수 없다.
Comment에 대한 결과도 단독으로 받아 볼 수 없다.
하위 document와 상위 document가 분리 될 필요가
있을 경우에는 Parent, Child를 통해 가능하다.
Parent, Child 관계의 경우에도 1:1 관계만 가능하다.
- 22. 엘라스틱 서치 활용
Elastic search + Express + Rxjs
/game?
id=1234
sourgrape/
game/
1234
Promise
result
(async)
subscribe
res.json( result );