02.Elasticsearch

deveopser·2022년 12월 20일
0

ElasticSearch

목록 보기
3/7

1.ElasticSearch란 무엇인가?

ElasticSearch는 분산 검색 및 분석 엔진으로, 대용량의 데이터를 실시간으로 검색하고 분석하는데 사용되는 오픈소스 솔루션입니다. 다음과 같은 특징을 가지고 있습니다.

분산 아키텍처
ElasticSearch는 분산 아키텍처를 기반으로 하여, 대용량의 데이터를 분산하여 저장하고 처리할 수 있습니다.
데이터 샤딩과 레플리케이션을 지원하여, 고가용성과 확장성을 보장합니다.
검색 기능
빠른 검색 속도와 강력한 검색 기능을 제공합니다.
다양한 검색 쿼리와 필터링을 제공하며, 집계, 분석 등의 작업을 수행할 수 있습니다.
한글 검색도 기본적으로 제공됩니다.
데이터 모델
JSON 기반의 데이터 모델을 사용하며, 동적 매핑과 타입 추론을 지원합니다.
다양한 데이터 유형을 지원하며, 데이터 인덱싱을 효율적으로 수행합니다.
클러스터링과 성능 최적화
다중 노드 클러스터링을 지원하여, 대용량 데이터의 분산 처리와 처리 속도를 높일 수 있습니다.
하이브리드 검색 엔진인 Lucene을 기반으로 하여, 검색 속도와 성능을 최적화할 수 있습니다.
확장성과 유연성
다양한 플러그인과 API를 제공하여, 유연한 기능 확장이 가능합니다.
다양한 프로그래밍 언어와 연동이 가능합니다.
오픈소스
ElasticSearch는 오픈소스 프로젝트로, 무료로 사용할 수 있으며 커뮤니티의 지속적인 개발과 지원이 이루어지고 있습니다.

2.ElasticSearch의 데이터 모델

ElasticSearch의 데이터 모델은 JSON 기반으로 구성되어 있으며, 다음과 같은 특징을 가지고 있습니다.

동적 매핑
ElasticSearch는 동적 매핑을 지원하여, 데이터가 인덱싱될 때 데이터 형식을 자동으로 감지하고 필드를 동적으로 매핑합니다.
이를 통해 인덱스의 스키마를 사전에 정의하지 않고도 데이터를 쉽게 색인할 수 있습니다.
데이터 타입
ElasticSearch는 다양한 데이터 타입을 지원합니다. 예를 들어, 문자열, 숫자, 날짜, 지리 정보 등의 데이터 타입을 지원합니다.
각 데이터 타입에 맞는 검색, 집계, 분석 기능을 제공합니다.
인덱싱
ElasticSearch는 인덱스를 기반으로 데이터를 검색하고 분석합니다.
인덱스는 문서(Document) 단위로 구성되며, 각 문서는 JSON 형식으로 저장됩니다.
각 문서는 유일한 식별자인 _id를 가지며, 필드는 key-value 쌍으로 구성됩니다.
샤딩
ElasticSearch는 대용량 데이터의 분산 처리를 위해 샤딩(Sharding)을 지원합니다.
인덱스를 여러 개의 파티션으로 나누어 저장하고, 각 파티션은 다른 노드에 저장됩니다.
검색 기능
ElasticSearch는 다양한 검색 기능을 제공합니다.
단순 텍스트 검색 외에도, 키워드 추출, 자동 완성, 유사한 단어 검색, 멀티 필드 검색 등의 기능을 제공합니다.
분석 기능
ElasticSearch는 다양한 분석 기능을 제공합니다.
집계, 그룹핑, 범위, 데이터 유형별 집계 등의 기능을 제공하여, 데이터 분석 및 인사이트 도출을 지원합니다.

3.ElasticSearch의 검색 쿼리와 필터링

ElasticSearch의 검색 쿼리와 필터링은 다음과 같은 기능을 가지고 있습니다.

검색 쿼리(Query)
ElasticSearch는 다양한 검색 쿼리를 지원합니다.
매치 쿼리(Match Query), 멀티 매치 쿼리(Multi-Match Query), 부분 일치 쿼리(Match Phrase Prefix Query), 범위 쿼리(Range Query), 부울 쿼리(Bool Query) 등이 있습니다.
검색 쿼리는 JSON 형식으로 작성됩니다.
필터링(Filtering)
검색 쿼리와 달리, 필터링은 캐시에 저장되어 재사용이 가능하며, 검색 결과에 영향을 주지 않습니다.
범위 필터(Range Filter), 존재 필터(Exists Filter), 부울 필터(Bool Filter) 등이 있습니다.
필터링은 캐시에 저장되어 검색 속도를 높이고, 검색 결과의 정확도를 높일 수 있습니다.
집계(Aggregations)
ElasticSearch는 데이터를 집계하여 분석하는 기능을 제공합니다.
텀 집계(Term Aggregation), 범위 집계(Range Aggregation), 날짜 집계(Date Aggregation) 등이 있습니다.
집계 결과는 검색 결과와 함께 반환됩니다.
하이라이트(Highlight)
ElasticSearch는 검색어와 일치하는 문서 부분을 강조하는 하이라이트 기능을 제공합니다.
하이라이트는 검색 결과에 영향을 주지 않으며, 검색 쿼리와 함께 사용됩니다.
자동완성(Suggest)
ElasticSearch는 검색어 자동완성 기능을 제공합니다.
Completion Suggester를 이용하여, 입력한 검색어에 대한 자동완성 제안을 생성할 수 있습니다.

4.ElasticSearch의 클러스터링과 샤딩

ElasticSearch의 클러스터링(Clustering)과 샤딩(Sharding)은 다음과 같은 특징을 가지고 있습니다.

클러스터링(Clustering)
ElasticSearch는 다중 노드 클러스터링을 지원합니다.
여러 대의 서버를 하나의 클러스터로 묶어서 사용하며, 각 노드는 역할에 따라 마스터 노드, 데이터 노드, 클라이언트 노드로 분류됩니다.
마스터 노드는 클러스터 관리 및 노드 간 통신을 담당하며, 데이터 노드는 실제 데이터를 저장하고 검색합니다.
클라이언트 노드는 외부 요청을 받아들여서 내부 노드로 전달합니다.
샤딩(Sharding)
ElasticSearch는 대용량 데이터의 분산 처리를 위해 샤딩을 지원합니다.
인덱스를 여러 개의 파티션으로 나누어 저장하고, 각 파티션은 다른 노드에 저장됩니다.
각 인덱스는 샤드 수와 레플리카 수를 설정하여, 데이터의 안정성과 가용성을 보장할 수 있습니다.
샤딩은 검색 속도와 성능을 향상시키는데 기여합니다.
클러스터와 샤드의 관계
ElasticSearch 클러스터는 하나 이상의 샤드로 구성됩니다.
각 샤드는 클러스터 내의 여러 노드에 분산되어 저장됩니다.
각 샤드는 일부 데이터만을 포함하므로, 전체 검색 작업은 여러 샤드에서 병렬적으로 수행됩니다.
검색 결과는 샤드 간 병합(merge)을 거쳐서 클라이언트에게 전달됩니다.

5.ElasticSearch의 데이터 인덱싱과 검색 성능 최적화

Elasticsearch는 대규모 데이터 검색 및 분석을 위한 오픈 소스 검색 엔진입니다. 다음은 Elasticsearch의 데이터 인덱싱과 검색 성능 최적화를 위한 몇 가지 방법입니다.

인덱싱 성능 최적화

Bulk API 사용: 대량의 문서를 색인화할 때 Bulk API를 사용하면 빠른 속도로 색인화할 수 있습니다. 일반적으로 한 번에 1000개 이상의 문서를 색인화하는 것이 좋습니다.

Refresh Interval 조정: Elasticsearch는 색인화 작업이 완료될 때마다 색인을 업데이트합니다. 그러나 이는 많은 자원을 사용하므로 Refresh Interval을 늘리는 것이 좋습니다.

Shard 개수 조정: 샤드는 Elasticsearch에서 데이터를 수평적으로 분산하는 방법입니다. 샤드 개수를 늘리면 검색 및 색인화 성능이 향상될 수 있지만, 너무 많은 샤드를 사용하면 네트워크 지연 및 오버헤드 문제가 발생할 수 있습니다.

검색 성능 최적화

Query 사용: 검색 결과를 좁히는 데 도움이 되는 Query를 사용합니다. Query는 검색 엔진이 문서를 검색할 때 사용하는 조건입니다.

Filter 사용: Filter는 Query와 비슷하지만, 검색 결과를 필터링하는 데 사용됩니다. Filter는 검색 엔진이 필터링을 하기 위해 인덱스를 스캔하지 않기 때문에 검색 속도가 더 빠릅니다.

Aggregation 사용: Aggregation은 Elasticsearch에서 데이터를 그룹화하고 분석하는 데 사용됩니다. Aggregation은 검색 결과에서 복잡한 작업을 수행할 수 있으며, 대규모 데이터의 요약 정보를 생성하는 데 유용합니다.

Sorting 사용: Sorting은 검색 결과를 정렬하는 데 사용됩니다. Sorting을 사용하면 결과를 더 빠르게 검색할 수 있습니다.

Highlighting 사용: Highlighting은 검색 결과에서 특정 텍스트를 강조하는 데 사용됩니다. 이 기능을 사용하면 사용자가 검색어와 일치하는 결과를 빠르게 찾을 수 있습니다.

이러한 최적화 기술은 Elasticsearch의 성능을 크게 향상시킬 수 있습니다. 그러나 이러한 기술은 모든 상황에서 동일한 결과를 보장하지는 않으므로 상황에 맞게 최적화 기술을 선택하는 것이 중요합니다.

profile
부끄럽게 공부하지말자.

0개의 댓글