본 콘텐츠의 이미지 및 내용은 AI로 생성되었습니다.
본 콘텐츠의 이미지 및 내용을 무단으로 복제, 배포, 수정하여 사용할 경우 저작권법에 의해 법적 제재를 받을 수 있습니다.
이미지 로딩 중...
AI Generated
2025. 11. 1. · 41 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)
함께 보면 좋은 카드 뉴스
vLLM 통합 완벽 가이드
대규모 언어 모델 추론을 획기적으로 가속화하는 vLLM의 설치부터 실전 서비스 구축까지 다룹니다. PagedAttention과 연속 배칭 기술로 GPU 메모리를 효율적으로 활용하는 방법을 배웁니다.
Web UI Demo 구축 완벽 가이드
Gradio를 활용하여 머신러닝 모델과 AI 서비스를 위한 웹 인터페이스를 구축하는 방법을 다룹니다. 코드 몇 줄만으로 전문적인 데모 페이지를 만들고 배포하는 과정을 초급자도 쉽게 따라할 수 있도록 설명합니다.
Sandboxing & Execution Control 완벽 가이드
AI 에이전트가 코드를 실행할 때 반드시 필요한 보안 기술인 샌드박싱과 실행 제어에 대해 알아봅니다. 격리된 환경에서 안전하게 코드를 실행하고, 악성 동작을 탐지하는 방법을 단계별로 설명합니다.
Voice Design then Clone 워크플로우 완벽 가이드
AI 음성 합성에서 일관된 캐릭터 음성을 만드는 Voice Design then Clone 워크플로우를 설명합니다. 참조 음성 생성부터 재사용 가능한 캐릭터 구축까지 실무 활용법을 다룹니다.
Tool Use 완벽 가이드 - Shell, Browser, DB 실전 활용
AI 에이전트가 외부 도구를 활용하여 셸 명령어 실행, 브라우저 자동화, 데이터베이스 접근 등을 수행하는 방법을 배웁니다. 실무에서 바로 적용할 수 있는 패턴과 베스트 프랙티스를 담았습니다.