본 콘텐츠의 이미지 및 내용은 AI로 생성되었습니다.
본 콘텐츠의 이미지 및 내용을 무단으로 복제, 배포, 수정하여 사용할 경우 저작권법에 의해 법적 제재를 받을 수 있습니다.
이미지 로딩 중...
AI Generated
2025. 11. 1. · 49 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)
함께 보면 좋은 카드 뉴스
프레임워크 선택 LangGraph vs CrewAI vs AutoGen 완벽 가이드
AI 에이전트 개발을 위한 세 가지 핵심 프레임워크를 비교 분석합니다. 각 프레임워크의 특징, 장단점, 실무 선택 기준을 초급 개발자도 이해할 수 있도록 설명합니다.
Day 6 학습 루프 이해하기
LLM이 실제로 어떻게 학습하는지 학습 루프의 핵심 원리를 단계별로 살펴봅니다. Forward Pass, Loss 계산, Backward Pass, 파라미터 업데이트까지 한 사이클의 전 과정을 이해합니다.
Day 5 Baseline 모델 만들기
복잡한 모델에 앞서 가장 단순한 Baseline 모델을 직접 만들어봅니다. 아무런 기교 없이 순수하게 다음 토큰을 예측하는 모델을 구현하면서, 언어모델의 가장 기본 구조를 이해합니다.
Day 4 학습용 샘플 데이터 만들기
LLM을 학습시키기 위한 샘플 데이터를 직접 만들어봅니다. 작은 텍스트 말뭉치를 준비하고, 토크나이저로 변환한 뒤 PyTorch 텐서로 만드는 전체 과정을 단계별로 배웁니다.
Day 2 PyTorch 기본기 정리
LLM을 직접 만들기 위해 꼭 알아야 할 PyTorch의 핵심 개념을 정리합니다. 텐서, 자동 미분, 옵티마이저까지 모델 학습의 기초를 다집니다.