본 콘텐츠의 이미지 및 내용은 AI로 생성되었습니다.
본 콘텐츠의 이미지 및 내용을 무단으로 복제, 배포, 수정하여 사용할 경우 저작권법에 의해 법적 제재를 받을 수 있습니다.
이미지 로딩 중...
AI Generated
2025. 11. 1. · 19 Views
ElasticSearch 핵심 개념 완벽 정리
ElasticSearch의 핵심 개념과 실무 활용법을 다룹니다. 인덱싱, 검색, 집계 등 주요 기능을 코드 예제와 함께 학습할 수 있습니다.
들어가며
이 글에서는 ElasticSearch 핵심 개념 완벽 정리에 대해 상세히 알아보겠습니다. 총 12가지 주요 개념을 다루며, 각각의 개념에 대한 설명과 실제 코드 예제를 함께 제공합니다.
목차
1. 기본 인덱스 생성
개요
ElasticSearch에서 인덱스를 생성하고 매핑을 정의하는 방법입니다. 인덱스는 RDB의 데이터베이스와 유사한 개념입니다.
코드 예제
from elasticsearch import Elasticsearch
es = Elasticsearch(['localhost:9200'])
index_body = {
"mappings": {
"properties": {
"title": {"type": "text"},
"price": {"type": "integer"}
}
}
}
es.indices.create(index='products', body=index_body)
설명
Elasticsearch 클라이언트를 생성하고, 텍스트와 정수 필드를 가진 products 인덱스를 생성합니다.
2. 문서 추가하기
개요
인덱스에 문서를 추가하는 방법입니다. 문서는 JSON 형태로 저장되며 자동으로 ID가 부여됩니다.
코드 예제
document = {
"title": "MacBook Pro 16",
"price": 2500000,
"category": "laptop"
}
result = es.index(
index='products',
body=document
)
print(f"Document ID: {result['_id']}")
설명
JSON 형태의 문서를 products 인덱스에 추가하고, 생성된 문서의 ID를 반환합니다.
3. 전문 검색 쿼리
개요
Match 쿼리를 사용한 전문 검색입니다. 텍스트 필드에서 형태소 분석을 통해 관련 문서를 찾습니다.
코드 예제
query = {
"query": {
"match": {
"title": "MacBook"
}
}
}
results = es.search(index='products', body=query)
for hit in results['hits']['hits']:
print(f"{hit['_source']['title']} - {hit['_score']}")
설명
title 필드에서 "MacBook"을 포함하는 문서를 검색하고, 관련도 점수와 함께 결과를 출력합니다.
4. 복합 Bool 쿼리
개요
Bool 쿼리로 여러 조건을 조합합니다. must, should, filter, must_not을 사용해 복잡한 검색이 가능합니다.
코드 예제
query = {
"query": {
"bool": {
"must": {"match": {"category": "laptop"}},
"filter": {"range": {"price": {"gte": 1000000, "lte": 3000000}}},
"should": {"match": {"title": "Pro"}}
}
}
}
results = es.search(index='products', body=query)
설명
카테고리가 laptop이고 가격이 100만원~300만원 사이인 제품을 검색하며, "Pro"가 포함되면 우선순위를 높입니다.
5. 범위 검색
개요
Range 쿼리로 숫자나 날짜 범위를 지정하여 검색합니다. gte(이상), lte(이하), gt(초과), lt(미만)을 사용합니다.
코드 예제
query = {
"query": {
"range": {
"price": {
"gte": 1500000,
"lt": 2000000
}
}
}
}
results = es.search(index='products', body=query)
print(f"Found {results['hits']['total']['value']} products")
설명
가격이 150만원 이상 200만원 미만인 제품을 검색하고, 검색된 문서의 총 개수를 출력합니다.
6. 집계 통계 분석
개요
Aggregation을 사용해 데이터 분석 및 통계를 생성합니다. 카테고리별 문서 수와 평균 가격을 계산합니다.
코드 예제
query = {
"size": 0,
"aggs": {
"category_stats": {
"terms": {"field": "category.keyword"},
"aggs": {
"avg_price": {"avg": {"field": "price"}}
}
}
}
}
results = es.search(index='products', body=query)
설명
카테고리별로 문서를 그룹화하고, 각 카테고리의 평균 가격을 계산합니다. size:0으로 문서는 반환하지 않습니다.
7. 벌크 작업
개요
Bulk API로 여러 문서를 한 번에 처리합니다. 대량의 데이터를 효율적으로 색인할 수 있습니다.
코드 예제
from elasticsearch.helpers import bulk
actions = [
{"_index": "products", "_source": {"title": "iPhone 15", "price": 1200000}},
{"_index": "products", "_source": {"title": "Galaxy S24", "price": 1100000}},
{"_index": "products", "_source": {"title": "iPad Pro", "price": 950000}}
]
success, failed = bulk(es, actions)
print(f"Success: {success}, Failed: {failed}")
설명
여러 문서를 배열로 준비하고 bulk 함수로 한 번에 색인하여, 네트워크 오버헤드를 줄입니다.
8. 문서 업데이트
개요
기존 문서의 일부 필드만 수정합니다. script를 사용하면 필드 값을 계산하여 업데이트할 수 있습니다.
코드 예제
es.update(
index='products',
id='document_id_here',
body={
"script": {
"source": "ctx._source.price *= params.multiplier",
"params": {"multiplier": 1.1}
}
}
)
설명
지정된 문서의 가격을 10% 인상합니다. ctx._source로 현재 문서에 접근하고 스크립트로 값을 변경합니다.
9. 퍼지 검색
개요
Fuzzy 쿼리로 오타나 유사한 단어를 포함하는 문서를 찾습니다. 편집 거리 기반으로 검색합니다.
코드 예제
query = {
"query": {
"fuzzy": {
"title": {
"value": "MacBok",
"fuzziness": "AUTO"
}
}
}
}
results = es.search(index='products', body=query)
설명
"MacBok"이라는 오타가 있어도 "MacBook"을 찾을 수 있습니다. fuzziness는 허용할 편집 거리를 지정합니다.
10. 하이라이팅
개요
검색 결과에서 매칭된 부분을 강조 표시합니다. 사용자에게 어떤 부분이 검색어와 일치하는지 보여줍니다.
코드 예제
query = {
"query": {"match": {"title": "MacBook"}},
"highlight": {
"fields": {"title": {}},
"pre_tags": ["<strong>"],
"post_tags": ["</strong>"]
}
}
results = es.search(index='products', body=query)
print(results['hits']['hits'][0]['highlight'])
설명
검색어와 일치하는 부분을 <strong> 태그로 감싸서 반환합니다. 검색 결과 UI에 활용할 수 있습니다.
11. 멀티 필드 검색
개요
Multi-match 쿼리로 여러 필드를 동시에 검색합니다. 각 필드에 가중치를 부여할 수 있습니다.
코드 예제
query = {
"query": {
"multi_match": {
"query": "laptop",
"fields": ["title^2", "category", "description"],
"type": "best_fields"
}
}
}
results = es.search(index='products', body=query)
설명
title, category, description 필드에서 "laptop"을 검색하며, title 필드에 2배의 가중치를 부여합니다.
12. 정렬과 페이징
개요
검색 결과를 정렬하고 페이징 처리합니다. from과 size로 페이지네이션을 구현합니다.
코드 예제
query = {
"query": {"match_all": {}},
"sort": [{"price": {"order": "desc"}}],
"from": 0,
"size": 10
}
results = es.search(index='products', body=query)
for hit in results['hits']['hits']:
print(f"{hit['_source']['title']}: {hit['_source']['price']}원")
설명
모든 문서를 가격 내림차순으로 정렬하고, 첫 10개 문서만 반환합니다. from 값으로 다음 페이지를 요청할 수 있습니다.
마치며
이번 글에서는 ElasticSearch 핵심 개념 완벽 정리에 대해 알아보았습니다. 총 12가지 개념을 다루었으며, 각각의 사용법과 예제를 살펴보았습니다.
관련 태그
#ElasticSearch #Indexing #Search #Aggregation #QueryDSL
댓글 (0)
함께 보면 좋은 카드 뉴스
Helm 마이크로서비스 패키징 완벽 가이드
Kubernetes 환경에서 마이크로서비스를 효율적으로 패키징하고 배포하는 Helm의 핵심 기능을 실무 중심으로 학습합니다. Chart 생성부터 릴리스 관리까지 체계적으로 다룹니다.
보안 아키텍처 구성 완벽 가이드
프로젝트의 보안을 처음부터 설계하는 방법을 배웁니다. AWS 환경에서 VPC부터 WAF, 암호화, 접근 제어까지 실무에서 바로 적용할 수 있는 보안 아키텍처를 단계별로 구성해봅니다.
AWS Organizations 완벽 가이드
여러 AWS 계정을 체계적으로 관리하고 통합 결제와 보안 정책을 적용하는 방법을 실무 스토리로 쉽게 배워봅니다. 초보 개발자도 바로 이해할 수 있는 친절한 설명과 실전 예제를 제공합니다.
AWS KMS 암호화 완벽 가이드
AWS KMS(Key Management Service)를 활용한 클라우드 데이터 암호화 방법을 초급 개발자를 위해 쉽게 설명합니다. CMK 생성부터 S3, EBS 암호화, 봉투 암호화까지 실무에 필요한 모든 내용을 담았습니다.
AWS Secrets Manager 완벽 가이드
AWS에서 데이터베이스 비밀번호, API 키 등 민감한 정보를 안전하게 관리하는 Secrets Manager의 핵심 개념과 실무 활용법을 배워봅니다. 초급 개발자도 쉽게 따라할 수 있도록 실전 예제와 함께 설명합니다.