ElasticSearch (엘라스틱 서치)

엘라스틱서치는 Lucene 라이브러리를 기반으로 Elasticsearch는 Apache Software Foundation에서 개발되었다.
엘라스틱서치는 오픈소스 분산 검색 및 분석 엔진으로, 다양한 유형의 데이터를 저장하고 검색할 수 있다. 현재 많은 기업 및 조직에서 검색 및 분석 도구로 사용되고 있다.
Architecture
엘라스틱서치는 루씬 라이브러리 기반 분산 검색 및 분석 엔진으로, RESTful API를 사용하여 여러 대의 서버에 데이터를 저장하고 검색할 수 있으며, 검색을 위해 인덱스를 사용한다.
인덱스는 여러 개의 샤드(shard)로 구성되어 있으며, 각 샤드는 여러 노드에 분산되어 저장된다.
검색 요청 시 각 노드에서 검색을 수행하고 결과를 모아 응답한다.
엘라스틱서치는 실시간 검색과 분석, 데이터 시각화, 대용량 데이터 처리 등 다양한 기능을 제공한다.
Elasticsearch는 Lucene 라이브러리를 기반으로 만들어진 분산 검색 및 분석 엔진으로, 대용량의 데이터를 빠르게 검색하고 분석할 수 있도록 Lucene의 기능을 확장하여 만들어졌다.
Lucene (루씬)
Lucene은 Apache 소프트웨어 재단에서 만든 자바 기반 검색 엔진 라이브러리로, 검색 엔진을 만들기 위한 기본 블록으로 사용된다.
Luccen은 현재 검색 및 색인 작업에 필요한 다양한 라이브러리를 제공한다.
검색 원리는 역 색인을 사용하여 수행한다.
역 색인은 단어를 문서 ID와 함께 저장하는 데이터 구조로 검색어에 해당하는 문서를 빠르게 찾을 수 있게 해주며 텍스트 처리, 쿼리 파싱, 검색 결과 정렬 등 다양한 작업을 지원한다.
역 색인 구조를 이용하면 검색어가 포함된 문서를 빠르게 찾을 수 있어 검색 속도를 높이는데 큰 역할을 한다.
역 색인 원리
- 문서의 텍스트를 단어 단위로 분석
- 불용어(stop words)와 같은 불필요한 단어 제외
- 단어를 정규화하여 표준화된 단어로 변환
- 변환된 단어와 해당 단어가 포함된 문서 ID 저장
- 검색어가 주어지면, 검색어를 정규화하여 표준화된 단어로 변환한 후 해당 단어가 포함된 문서 ID리스틀 찾아냄 검색어가 여러 개인 경우 각 검색어의 문서 ID 리스트를 찾은 후 이를 조합하여 최종 검색 결과 반환
Index (인덱스)
Elasticsearch에서 인덱스는 데이터를 저장하는 논리적인 단위입니다.
Shard (샤드)
샤드는 엘라스틱서치에서 인덱스의 분할 단위.
보통 인덱스가 커지면 검색 속도가 느려지는데, 이를 방지하기 위해 인덱스를 여러 개의 샤드로 구성하여 저장하고 검색할 수 있다. 이렇게 하면 대용량의 데이터도 빠르게 검색할 수 있다.
각 샤드는 여러 노드에 분산되어 저장되는데 각 노드에는 master와 slave 노드가 있다.
master 노드
전체 클러스터 내의 작업을 조정한다. 노드가 추가되거나 삭제되면, master 노드는 이를 감지하고 클러스터를 업데이트 한다.
slave 노드
master 노드로부터 할당된 작업을 수행하여 전체 클러스터의 부하를 분산한다.
클러스터
여러 대의 컴퓨터를 하나의 시스템으로 묶어서 사용하는 것을 말함 클러스터를 구성하면, 하나의 서버에서 처리할 수 없는 대규모의 작업도 분산처리하여 빠르게 처리할 수 있다. 또한, 시스템 중 하나의 컴퓨터에 장애가 발생해도 다른 컴퓨터에서 작업을 계속할 수 있기 때문에 시스템의 가용성을 높일 수 있다.
엘라스틱서치 데이터 처리
데이터 처리
엘라스틱서치에서는 다음과 같은 방법으로 데이터를 처리할 수 있다.
기능 | 설명 |
색인(Indexing) | JSON 문서를 색인하고, 이를 검색할 수 있도록 만든다. 색인은 인덱스와 샤드로 나누어 구성된다. |
검색(Searching) | 엘라스틱서치는 다양한 검색 쿼리를 지원하며, 검색 결과를 정렬하고 필터링할 수 있다. |
집계(Aggregations) | 엘라스틱서치는 집계 쿼리를 지원하고, 결과를 통계 정보로 제공한다. |
업데이트(Updating) | 엘라스틱서치는 기존 문서를 업데이트하거나 삭제할 수 있다. |
백업 및 복원(Backup and Restore) | 엘라스틱서치는 스냅샷 및 복원 기능을 제공하며, 데이터 백업 및 복원을 쉽게 수행할 수 있다. |
위의 기능을 사용하여 데이터를 처리하면, 엘라스틱서치에서 빠르고 정확한 검색을 수행할 수 있다.
Elasticsearch Query DSL
Elasticsearch Query DSL은 JSON 기반으로 복잡한 쿼리를 구성할 수 있도록 지원하는 기능이다.
term, match, bool 등 다양한 쿼리 유형을 제공하여 사용자는 특정 기준에 따라 고급 검색 및 결과 필터링을 수행할 수 있다.
term
term 쿼리는 정확하게 일치하는 단어를 검색한다.
예를 들어, "title" 필드에서 "elasticsearch"와 일치하는 문서를 검색하려면 다음과 같이 쿼리를 작성할 수 있다.
{
"query": {
"term": {
"title": "elasticsearch"
}
}
}
match
match 쿼리는 검색어와 가장 유사한 문서를 검색한다.
예를 들어, "title" 필드에서 "elasticsearch tutorial"과 가장 유사한 문서를 검색하려면 다음과 같이 쿼리를 작성할 수 있다.
{
"query": {
"match": {
"title": "elasticsearch tutorial"
}
}
}
bool
bool 쿼리는 여러 개의 쿼리를 결합할 수 있는 쿼리이다.
bool 쿼리는 must, must_not, should 섹션을 가질 수 있다.
섹션 | 설명 |
must | 모두 true인 문서를 반환 |
must_not | 모두 false인 문서를 반환 |
should | 하나 이상의 true 문서를 반환 |
예를 들어, "title" 필드에서 "elasticsearch tutorial"을 검색하되,
"description" 필드에서 "beginner"이 포함된 문서를 제외하려면 다음과 같이 쿼리를 작성할 수 있다.
{
"query": {
"bool": {
"must": [
{
"match": {
"title": "elasticsearch tutorial"
}
}
],
"must_not": [
{
"match": {
"description": "beginner"
}
}
]
}
}
}
'IT > 기록' 카테고리의 다른 글
Burp Suite 버프 스위트 설치 (1) | 2024.09.01 |
---|---|
Github 자격 증명 캐싱 (별첨 Git Token(classic) 발급) (0) | 2024.08.28 |
안드로이드 스튜디오 File Nesting (0) | 2022.11.06 |
Docker에서 GitLab 설치해보기 (0) | 2022.10.25 |
[Gmail] 특정 보낸 사람 메일이 프로모션 수신함으로 자동 분류 (0) | 2022.10.20 |