티스토리 뷰
728x90
안녕하세요. 개발개입니다.
위키북스에서 나온 <엘라스틱서치 실무 가이드>를 공부하면서
정리한 부분을 다음과 같은 목차에 따라 공유합니다.
(설치와 관련된 포스트는 많기 때문에 따로 작성하지 않았습니다.)
이번 글은 엘라스틱서치의 이해에 대한 첫 번째 포스팅입니다.
목차
- 검색 시스템의 구성 요소
- 엘라스틱서치 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
'KR > 검색' 카테고리의 다른 글
[Elasticsearch] - 3. 데이터 모델링 (0) | 2020.03.23 |
---|---|
[Elasticsearch] - 2. 엘라스틱서치의 이해 (2) (0) | 2020.03.23 |
[데이터 색인] 역색인 구조 (역 인덱스; Inverted Index) (2) | 2020.03.15 |
[정보검색론] - 4. 한글 색인어 추출 (0) | 2020.03.08 |
[정보검색론] - 3. 영어 색인어 추출 (0) | 2020.03.01 |