[데이터베이스] 엘라스틱서치

엘라스틱서치에서 데이터를 저장하는 단위는 도큐먼트(document)이며, 도큐먼트는 인덱스(index)라는 논리적 단위에 저장된다. 일반적으로 데이터의 성격 별로 서로 다른 인덱스를 생성하여 데이터를 저장한다.

엘라스틱서치 인스턴스(instance)를 시작하는 것은 노드(node)를 시작하는 것이다. 일반적으로 하나의 컴퓨팅 자원인 서버(물리적 또는 논리적으로 구분된)에 하나의 노드를 구성한다. 하나의 서버에 여러 노드를 구성할 수도 있지만 권장되는 방법은 아니다. 엘라스틱서치의 노드는 역할에 따라 마스터(master) 노드, 데이터(data) 노드, 인제스트(injest) 노드, 트랜스폼(transform) 노드 등으로 구분된다. 시스템의 하드웨어 자원 상황, 서비스의 성격에 따라 클러스터를 구성하는 노드들에 서로 다른 역할을 부여하여 서비스의 고가용성, 안정성, 데이터 일관성 등을 적절하게 유지한다.

여러 노드들은 서로 연결되어 클러스터(cluster)를 구성한다. 엘라스틱서치를 단일 노드로 실행한다면 하나의 노드로 구성된 클러스터가 실행되는 것이다. 단일(single) 노드 구성은 개발이나 테스트 목적으로 사용하는 것이 좋으며 실제 운영 환경에서는 다중 노드로 구성하고 하나의 노드는 하나의 역할만 수행하도록 구성하는 것이 좋다.

여러 노드로 클러스터를 구성할 경우 모든 노드는 클러스터의 다른 모든 노드에 대해 알고 있으며 클라이언트 요청을 적절한 노드로 전달할 수 있다.

엘라스틱서치는 도큐먼트를 색인(인덱싱)한다. 문서를 저장할 때 _id 값을 직접 지정할 수 있으며 지정하지 않으면 자동으로 생성된다. _id 값은 동일한 인덱스에서 도큐먼트를 식별하기 위한 고유값이다. 엘라스틱서치에 저장된 모든 도큐먼트는 _id 값을 가지고 있다. 도큐먼트의 조회, 갱신, 삭제 작업은 모두 _id 값을 기반으로 한다.

엘라스틱서치는 전용 도큐먼트 쿼리 DSL을 통한 도큐먼트 검색 기능을 제공한다. 단순한 텍스트 매칭 뿐만 아니라 렉시컬 검색(lexical search)의 전문 검색(full-text search)과 시맨틱 검색(semantic search) 모두 가능하다.

엘라스틱서치는 JSON 데이터를 도큐먼트로 처리하기 위한 여러 작업을 REST API로 제공한다.

  • 저장 (색인): PUT 인덱스명/_doc
  • 조회: GET 인덱스명/_doc/_id값
  • 갱신: POST 인덱스명/_update/id값
  • 검색
    • GET 인덱스명/_search
    • POST 인덱스명/_search
  • 삭제: DELETE 인덱스명/_doc/_id값


로그스태시

특정 필드를 제거하기 위해 로그스태시를 사용할 수 있다. http 코덱을 사용하면 HTTP 요청으로 JSON 데이터를 엘라스틱서치에 저장할 수 있다.


타입이 변경되는 필드

엘라스틱서치는 기본적으로 동일한 인덱스 상에서 동일한 필드에 대해 서로 다른 타입을 지정할 수 없다.


참고

Comments