티스토리 뷰

728x90

 

안녕하세요. 개발개입니다.

 

위키북스에서 나온 <엘라스틱서치 실무 가이드>를 공부하면서
정리한 부분을 다음과 같은 목차에 따라 공유합니다.

(설치와 관련된 포스트는 많기 때문에 따로 작성하지 않았습니다.)

 

  1. 엘라스틱서치의 이해 (1)
  2. 엘라스틱서치의 이해 (2)
  3. 데이터 모델링
  4. 엘라스틱서치 분석기
  5. 커스텀 분석기

 

이번 글은 엘라스틱서치의 이해에 대한 첫 번째 포스팅입니다.

 

목차
- 검색 시스템의 구성 요소
- 엘라스틱서치 vs 관계형 데이터베이스
- 엘라스틱서치의 특징

 

 

오타, 오류 혹은 기타 의견은 언제든지 환영합니다.

 

 

 

 

 


 

 

1. 검색 시스템의 구성 요소

  • 수집기 
    - 웹 상의 정보를 수집

    - 파일의 경우 파일 이름/내용/경로 등의 정보를 수집하고 저장
    - 크롤러(Crawler), 스파이더(Spider), 웜(Worms), 웹 로봇(Web Robot) 등으로 불림
  • 색인기
  • - 수집기가 수집한 데이터를 검색 가능한 구조로 가공해서 저장
    - 형태소 분석기를 통해 유의미한 단어를 추출하고 검색에 유리한 [역색인 구조]로 데이터를 저장
  • 스토리지
  • - 색인기가 색인한 데이터를 보관하는 물리적 저장소
  • 검색기
  • - 저장된 문서 중 사용자 질의와 일치하는 결과를 [역색인 구조]를 통해 찾아서 반환
    - 유사도 기반의 검색 순위 알고리즘으로 사용자 질의와 문서가 일치하는지 판단
    - 색인기와 마찬가지로 형태소 분석기를 이용해 사용자 질의에서 유의미한 단어를 추출해서 검색
      (즉, 사용하는 형태소 분석기에 따라 검색 품질이 달라짐)

 

 

2. 엘라스틱서치 vs 관계형 데이터베이스

용어 비교

관계형 데이터베이스 (RDBMS) 엘라스틱서치 (Elasticsearch)
데이터베이스 (Database) 인덱스 (Index)
파티션 (Partition) 샤드 (Shard)
테이블 (Table) 타입 (Type)
(Row) 문서 (Document)
(Column) 필드 (Field)
스키마 (Schema) 매핑 (Mapping)
SQL Query DSL

 

  • 인덱스 (Index)
    • 데이터 저장공간
    • 하나의 인덱스는 하나의 타입만 가짐
    • 동시에 여러 개의 인덱스를 검색하는 것도 가능
    • 분산 환경으로 구성 시, 하나의 인덱스가 여러 노드에 분산 저장 및 관리됨
    • 인덱스의 이름은 반드시 소문자로
    • 인덱스가 없는 상태에서 데이터를 삽입하면 그 정보를 바탕으로 인덱스가 자동 생성됨
  • 샤드 (Shard)
    • 색인된 데이터가 나뉘어 저장되는 물리적 공간 내 파티션
    • 다수의 샤드로 문서를 분산 저장함으로써 데이터 손실 위험을 최소화
  • 타입 (Type)
    • 인덱스의 논리적 구조
    • 엘라스틱서치 6.1버전부터 하나의 인덱스에는 하나의 타입만 사용 가능
  • 문서 (Document)
    • 데이터가 저장되는 최소 단위
    • JSON 포맷으로 저장됨
    • 하나의 문서는 다수의 필드로 구성
    • 문서 안에 문서도 가능
  • 필드 (Field)
    • 문서를 구성하기 위한 속성 (DB의 Column같은 개념)
    • 하나의 필드는 다수의 데이터 타입을 가질 수 있음
  • 매핑 (Mapping)
    • 문서의 필드와 필드의 속성을 정의하고 그에 따른 생인 방법을 정의하는 프로세스
    • 매핑 정보에 여러 가지 데이터 타입을 지어할 수 있지만 필드명을 중복 사용할 수 없음

 

 

기능 방식 비교

기능 종류 데이터베이스 문법 엘라스틱서치 HTTP 메서드
데이터 조회 SELECT GET, POST
데이터 생성 INSERT PUT
인덱스 업데이트 UPDATE POST
데이터 삭제 DELETE DELETE
인덱스의 정보 확인 - HEAD

 

 

3. 엘라스틱서치의 특징

  • NoSQL (No Structured Query Language)
  • 분산 처리를 통해 빠른 검색 가능
  • HTTP를 통해 JSON형식의 Restful API 이용
  • RDBMS에서 LIKE 검색할 때와 달리 검색어의 대소문자에 유연
  • 비정형 데이터도 검색 가능
  • 분석 통계 유용
  • [역색인 구조]
  • 스키마리스(Schemaless; 인덱스가 없더라도 문서를 추가하면 인덱스를 자동생성 - 비권장)
    └ 엘라스틱서치에서 문자열은 단순 문자열(keyword)과 형태소 분석이 가능한(text)타입으로 구분하는데 자동 생성은 둘 다 생성해 버리므로 공간낭비가 심하고 데이터 구조가 복잡할 수록 검색 품질이 저하될 수 있음
    └ action.auto_create_index를 false로 설정해서 끌 수 있음
  • 전문 검색(Full-text Search; 내용 전체를 색인해서 특정 단어가 포함된 문서를 검색) 가능
  • 멀티테넌시(Multi-tenancy; 상이한 인덱스일지라도 동일한 필드명을 대상으로 검색 가능)
  • 트랜잭션과 롤백 기능을 제공하지 않으므로 데이터 손실의 위험도 있음
  • 업데이트 명령 시, 기존 내용을 삭제하고 새로 생성하는 방식

 

 

(참고) Index  vs  Indices

  • Index : 색인 데이터
  • Indexing : 색인하는 과정
  • Indices : 매핑 정보를 저장하는 논리적인 데이터 공간

 

 

다음 이야기 : [Elasticsearch] - 2. 엘라스틱서치의 이해(2)

 

역색인 구조에 대해 알아보기 : [데이터 색인] 역색인 구조 (역 인덱스; Inverted Index)

 

 

 


 

 

 

본 글은 다음을 참고하여 작성되었습니다.

 

권택환 외, 엘라스틱서치 실무가이드, 위키북스

 

 

 

 

 

728x90
Total
Today
Yesterday
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
12-25 02:23