티스토리 뷰
Elasticsearch 논리 개념
Elasticsearch에는 두 가지 논리적 개념이 있다.
- Documents
- 데이터베이스의 한줄 한줄의 행과 같은 개념
- 검색하고자 하는 대상
- 텍스트 뿐만 아니라 구조화된 데이터라면 모두 사용할 수 있다.
- 모든 Documents는 고유 ID를 가질 수 있으며, 직접 고유 ID를 할당할 수도 있고, Elasticsearch를 통해 자동으로 할당할 수도 있다.
- Indices (Index)
- Elasticsearch에서 query할 수 있는 가장 높은 단계의 엔티티이며, 여러 Document를 포함할 수 있다.
- 데이터베이스의 테이블과 같은 개념이다.
- 각 Documents 내의 데이터 유형을 정의하는 체계가 있다.
- 하나의 Elasticsearch와 Index에는 한 가지 유형의 Document만 사용할 수 있다.
- 데이터베이스와 함께 기억하면 보다 쉽게 이해할 수 있다. (동작하는 방식은 데이터베이스와 크게 다르다. 개념적인 부분만 이렇게 이해할 수 있도록 하자.)
- Cluster == Database
- Index == Table
- Document == raw
단어 빈도(TF - Term Frequency) / 역 문서 빈도 (IDF - Inverse Document Frequency)
색인은 역색인(Inverted index)이라 불리며 대부분의 검색 엔진이 작동하는 원리다. 예를 들어, Index에 텍스트 데이터가 포함된 다음의 여러 Document가 있다고 가정해보자.
Document1 - Space: The final frontier. These are the voyages...
Document2 - He's bad. he's number one. He's the space cowboy with the laser gun!
Inverted index
space: 1, 2
the: 1, 2
final: 1
frontier: 1
he: 2
bad: 2
etc...
- 역색인은 이 문자열을 직접 저장하지 않고 완전히 뒤바꾼다.
- Elasticsearch와 같은 검색 엔진은 실제로 각 Document를 개별 검색어로 분할한다. 예시를 보면 Document를 단어별로 해체하고 소문자로 변환한다.
- 이후 각 검색어를 해당 검색어가 포함된 document에 mapping한다. 예를 들어
space
라는 단어는 두 document 모두에 나타난다. 따라서 역색인은space
가 document1,2에 포함되어있음을 나타내는 것이다.- 실제로는 검색어가 어떤 문서에 있는지 뿐만 아니라 문서 내의 위치까지 저장한다.
관련성
관련성은 특정 단어가 Document 내에서 얼마나 자주 사용되는지 뿐만 아니라 전체 Index에서 얼마나 자주 사용되는지와 비교하여 보여준다.
그렇다면 관련성의 개념을 어떻게 다뤄야할까? the
라는 단어는 매우 흔하고 사실상 모든 문서에 포함되어 있다. 따라서 the
를 검색할 때, 어떻게 the
가 의미 있는 문서만을 가려낼 수 있을까? 여기서 TF-IDF(Term Frequency - Inverse Document Frequency) 라는 개념이 등장한다.
- TF는 지정된 검색어가 문서 내에서 나타나는 빈도를 뜻한다.
- DF는 인덱스 내의 모든 문서에 단어가 사용되는 빈도를 뜻한다.
- TF를 DF로 나눈다면 이는 IDF로 곱하는 것과 같으며, 관련성을 수학적으로 표현한 것이 된다.
space
라는 단어의 빈도수가 높은 document는 우주와 관련이 있을것이며,the
는 모든 document에 빈도수가 높게 등장하게 될 것이다.
- 어떠한 단어를 검색하면 관련성이 높은 순서대로 결과를 가져온다.
Elasticsearch 사용하기
그렇다면 실제로 Elasticsearch에서 어떻게 index를 사용할까? 이는 세가지 방법이 있다.
- RESTful API
- HTTP의 REST API를 통해 GET request가 생성되고, 해당 request의 body에 검색하고자 하는 정보가 JSON 형식으로 포함되어 있는 것이다.
- 웹과 소통하는 것처럼 HTTP 요청을 처리할 수 있는 언어, API, 도구, 또는 환경이 있다면 Elasticsearch도 처리할 수 있다.
- Client API's
- 무언가를 검색하고 index에 삽입할 수 있는 특화된 API를 사용한다.
- Analytic Tools (ex. Kibana)
- Kibana는 코드를 작성하지 않고도 Index와 상호작용할 수 있게 하는 웹 기반 그래픽 UI이다.
Elasticsearch의 확장성
Elasticsearch의 아키텍처가 어떻게 필요에 따라 컴퓨터 클러스터 전체로 확장할 수 있는지 알아보자.
Shard
Elasticsearch의 확장성의 핵심은 하나의 Index가 shard라는 조각들로 나뉘는 것이다. 각 shard는 Lucene 자체의 독립적인 인스턴스이다.
만약 컴퓨터 클러스터가 있는 경우 shard를 여러 컴퓨터에 분산시킬 수 있다. 용량이 더 필요하다면 더 많은 컴퓨터를 배치하고 전체 index에 shard를 추가해서 효율적으로 분산시킬 수 있다.
Primay And Replica Shards
- Primary shard
- 쓰기 요청이 처음 보내질 곳
- Replica shard
- 읽기 요청을 처리할 수 있는 곳
- 복원력을 높이기 위해 홀수의 노드를 사용하는 것이 좋다.
- 레플리카 수가 많을수록 전체 클러스터에 대한 읽기 용량이 증가한다.
- 프라이머리 샤드의 수가 많아질 수록 쓰기 용량은 제한된다.
- 프라이머리 샤드의 수를 나중에 변경할 수 없다. 인덱스를 생성할 때 바로 그 수를 정해야한다.
'Data Engineering > Elasticsearch' 카테고리의 다른 글
[Elasticsearch] Section 3. Elasticsearch를 사용한 검색 (0) | 2022.11.23 |
---|---|
[Elasticsearch] 데이터 매핑 및 색인화 - 2. 동시성, Analyzer, Flattened, Mapping Exception (0) | 2022.11.22 |
[Elasticsearch] Data 매핑 및 색인화 - 1 (0) | 2022.11.22 |
Elasticsearch 개요 (0) | 2022.11.15 |
Ubuntu Elasticsearch Install (0) | 2022.11.15 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- cka
- Hadoop
- DP
- Algorithm
- logstash
- kafka
- 네트워크
- Flutter
- sqoop
- 파이썬
- 프로그래머스
- heapq
- GROK
- 이코테
- 빅데이터
- BOJ
- Elasticsearch
- HDFS
- 빅데이터를지탱하는기술
- 백준
- oozie
- mahout
- CSAPP
- Python
- OS
- Espher
- kubernetes
- CS
- DFS
- elasticsaerch
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함