본문 바로가기

Computer/Study

엘라스틱서치 실무가이드(1장, 2장)

1] 검색 시스템의 이해

: 대용량 데이터를 기반으로신뢰성 있는 검색 결과를 제공하기 위해 검색엔진을 기반으로 구축된 시스템을 통칭

: 대표적으로 서비스로서의 웹 검색사이트(구글, 네이버 등)등이 있으며 프로그램으로서는 엘라스틱서치, 솔라등이 있다.

  • 검색서비스 > 검색시스템 > 검색엔진  → 검색사이트 > 검색기능 > 도구

 

1.1] 검색시스템 구성요소

  • 수집기 : 웹상에서 필요한 정보를 수집하는 프로그램
  • 스토리지 : 색인 처리된 데이터를 스토리지에 보관하는 저장소
  • 색인기 : 검색엔진이 수집한 데이터를 검색 가능한 구조로 가공하고 저장하는 역할을 함.
  • 검색기 : 사용자 질의를 입력받아 색인기에 저장한 역색인 구조에서 일치하는 문서를 찾아 결과로 반환 함.

1.2] 엘라스틱서치 장점

  • 오픈소스 검색엔진 : 루씬을 기반으로 개발된 오픈소스 검색엔진 > 많은 사람들이 기여하고 발전해감
  • 전문 검색 : 내용 전체를 색인해두어 특정 단어가 포함된 문서를 검색할 수 있다.
  • 통계 분석 : 엘라스틱서치와 키바나를 연동하여 로그를 시각화하고 분석할 수 있다.
  • 스키마리스 : 정형화되지 않은 문서(여러 다양한 형태의 문서)도 자동으로 색인하고 검색할 수 있다.
  • RESTful API : HTTP 기반의 RESTful API를 지원하고 요청뿐 아니라 JSON형식을 이용하기 때문에 다양한 플랫폼에서 사용 가능
  • 멀티테넌시 : 상이한 인덱스일지라도 검색 필드만 같다면 한번에 조회가 가능
  • Document-Oriented : 여러계층의 데이터를 JSON형식의구조화된 문서로 인덱스에 저장할 수 있다.
  • 역색인 : 엘라스틱 서치는 역색인을 지원하여 키워드 검색시 속도가 더 좋다.
  • 확장성과 가용성

1.3] 엘라스틱서치 단점

  • 실시간이 아니다(일반적으로 색인 처리 후 1초뒤에 검색 가능) - 내부적으로 커밋과 플러시와 같은 작업이 있기 때문
  • 트랜잭션과 롤백기능을 제공하지 않음 - 분산시스템으로 구성되었기 때문에 클러스터 성능향상을 우선시함.
  • 데이터의 업데이트를 제공하지 않음 - 삭제후 변동된 내용을 생성

2] 엘라스틱서치 구성 개념

  • 인덱스 : 데이터 저장공간 - 하나의타입만 가지며 여러 물리적 노드에 여러개의 논리적 인덱스를 생성이 가능하고 엘라스틱서치는 멀티테넌시하기 때문에 여러개의 인덱스에서 동시 검색이 가능하다.
  • 샤드 : 색인된문서는 하나의 인덱스에 담기는데 해당 데이터는 여러개의 파티션(샤드)로 나뉘어 저장된다.
  • 타입 :  인덱스의논리적 구조가 된다.
  • 문서 : 데이터가 저장되는 최소의 단위가 되며 기본적으로 JSON 형식으로 데이터가 저장된다.
  • 필드 : 문서를 구성하기 위한 속성으로 목적에 따라 다수의 데이터 타입을 갖을수 있다.
  • 매핑 : 문서의 필드와 필드의속성을 정의하고 그 색인방법을 정의하는 프로세스

2.1]노드의 종류

: 클러스터는 물리적인 노드 인스턴스들의 모임으로 클러스터는 모든 노드의 검색과 색인 작업을 관장하는 논리적인 개념으로 분산처리를 하기위해 다양한형태의 노드들로 구성해야함.

  • 마스터노드 : 클러스터 관리 / 노드 추가와 제거 같은 클러스터의 전반적인 관리를 담당
  • 데이터노드 : 실질적인 데이터 저장 / 검색과 통계 같은 데이터 관련 작업 수행
  • 코디네이팅 노드 : 사용자의 요청만 받아서 처리 / 클러스터 관련요청은 마스터에 전달 / 데이터 관련 요청은 데이터 노드에 전달
  • 인제스트 노드 : 문서의 전처리 작업 전달 / 인덱스 생성전 문서의 형식을 다양하게 변경.

2.2] 클러스터, 노드, 샤드

2.3] 엘라스틱서치에서제공하는 주요 API

  • 인덱스 관리 API
  • 문서 관리 API
  • 검색 API
  • 집계 API

[스키마리스 기능은 가급적 사용 X]

: 데이터를 생성시 인덱스가 없으면 자동적으로 인덱스가 생성

> 세부적인 필드 정보가 빠져 매핑되지 않아 추후 검색시 결과가 누락될 수 있다.

> 모든 필드가 멀티필드로 구성되어 공간의 낭비를 초래할 수 있다.

> 검색의 품질이 떨어질 수 있다.(text의 경우 Standard Analyzer가 사용되어 조사의 구분을 하지 못함)

 

[인덱스 생성]

- PUT 메소드를 사용

- 인덱스의 매핑정보는 한번 생성되면 바꿀수 없어 삭제후 다시해야함

 

[인덱스 삭제]

- DELETE 메소드를 사용

 

2.4] 문서관리 API

  • 문서 생성 : POST 메소드를 사용하며 id를 설정해준다.
    • id를 미설정시 엘라스틱서치에 _id값이 UUID를 통해 무작위로 생성된다.
  • 문서 조회 : GET 메소드를 사용하며 생성했던 id를 지정해 조정한다.
  • 문서 삭제 : DELETE 메소드를 사용하며 생성했던 id를 지정하여 삭제한다.

2.5] 검색 API

  1. HTTP URI 형태의 파라미터를 URI에 추가해 검색하는 방법
  2. RESTful API 방식인 QueryDSL을 사용해 요청본문에 질의 내용을 추가해 검색하는 방법

2.6] 집계 API