엘라스틱 서치란
아파치 Lucene를 바탕으로 개발된 분산 검색엔진
RESTful 웹 인터페이스를 가지고 있음
JSON을 통해 데이터를 주고 받음.
엘라스틱 서치
엘라스틱 서치란
클러스트
엘라스틱서치 시스템의 가장 큰 단위
하나의 클러스터는 다수의 노드로 구성
하나의 클러스터를 다수의 서버에 바인딩 할 수 있음.
역으로 하나의 서버에 다수의 클러스터를 운영할 수 있음
엘라스틱 서치란
노드
엘라스틱 서치를 구성하는 하나의 프로세스 단위
다수의 샤드로 구성됨
같은 클러스터 명을 가지면 자동으로 바인딩 됨
노드마다 역할을 나눌 수 있으며, 역할에는 master, data, ingest, tribe가 있다.
마스터 노드에 문제가 생기면 다른 노드가 그 역할을 대신 한다.
엘라스틱 서치란
샤드, 레플리카
샤드는 데이터 검색의 단위 인스턴스이다.
기본적으로 하나의 index는 5개의 샤드를 가진다.
5개의 샤드는 Primary 샤드가 되서 index를 나눠 가진다.
Primary 샤드에 문제가 생기면 레플리카 샤드가 자리를 대신한다.
Primaty 샤드와 레플리카 샤드는 절대 같은 노드에 존재 하지 않는다.
get, search 시 index에 속한 샤드들이 분산 처리 한다.
엘라스틱 서치 불편한 점
매핑 변경 불가.
한번 정해진 매핑은 추가, 변경, 삭제가 불가 하다.
공식 문서에서도 꼼수를 제공하지만 실제 매핑이 변경되는 것은 아니다.
Mysql에서 컬럼의 자료형을 추가, 삭제 하거나 자료형을 자유자재로
변경 하는 것 처럼 할 수 없다.
엘라스틱 서치 불편한 점
Nested Field에 직접 쿼리 불가
하이라이트 된 부분이 Nested Field.
Comment에 대한 쿼리는 단독으로 수행 할 수 없다.
Comment에 대한 결과도 단독으로 받아 볼 수 없다.
하위 document와 상위 document가 분리 될 필요가
있을 경우에는 Parent, Child를 통해 가능하다.
Parent, Child 관계의 경우에도 1:1 관계만 가능하다.