색인(Indexing)이란?
📌 Elasticsearch에서 색인(Indexing)은 데이터를 저장하고 검색할 수 있도록 변환하는 과정입니다.
- RDBMS의 "INSERT"와 유사하지만, 단순 저장이 아닌 역색인(Inverted Index) 구조를 사용하여 빠른 검색을 지원.
- 모든 데이터는 JSON 문서(Document) 형태로 저장됨.
- 색인된 데이터는 샤드(Shard) 단위로 분산 저장됨.
문서 색인 (PUT /index/_doc/1)
Elasticsearch에서 데이터를 저장하는 기본 단위는 **문서(Document)**이며, JSON 형식으로 저장됩니다.
✅ (1) 문서 색인 예제 (PUT)
PUT /products/_doc/1
{
"name": "Elasticsearch 책",
"category": "IT",
"price": 30000,
"stock": true,
"release_date": "2023-06-01"
}
✅ products 인덱스에 ID가 1인 문서를 색인.
문서 검색 (GET /index/_search)
색인된 문서는 다양한 쿼리를 사용하여 검색할 수 있습니다.
✅ (1) 전체 문서 검색
GET /products/_search
✅ products 인덱스의 모든 문서 검색.
✅ (2) 특정 필드 검색 (Match Query)
GET /products/_search
{
"query": {
"match": {
"name": "Elasticsearch"
}
}
}
✅ "name" 필드에 "Elasticsearch"라는 단어가 포함된 문서 검색 (형태소 분석 적용).
✅ (3) 정확한 단어 검색 (Term Query)
GET /products/_search
{
"query": {
"term": {
"category": "IT"
}
}
}
✅ "category" 필드는 keyword 타입이므로 정확히 "IT"와 일치하는 문서만 반환.
✅ (4) 여러 조건 검색 (Bool Query)
GET /products/_search
{
"query": {
"bool": {
"must": [
{ "match": { "name": "Elasticsearch" } },
{ "term": { "category": "IT" } }
],
"filter": [
{ "range": { "price": { "gte": 20000, "lte": 40000 } } }
]
}
}
}
✅ bool 쿼리를 사용하여 여러 조건을 결합하여 검색 가능
- "must" → 모든 조건을 만족하는 문서 반환.
- "filter" → 가격이 20,000 ~ 40,000 사이인 문서 필터링 (랭킹 영향 없음).
문서 업데이트 및 삭제
색인된 문서는 업데이트(Update) 또는 삭제(Delete) 할 수 있습니다.
✅ (1) 문서 업데이트 (POST /_update)
POST /products/_update/1
{
"doc": {
"price": 28000
}
}
✅ ID가 1인 문서의 price 값을 28000으로 변경.
✅ (2) 여러 필드 업데이트
POST /products/_update/1
{
"doc": {
"price": 28000,
"stock": false
}
}
✅ 여러 필드를 동시에 업데이트 가능.
✅ (3) 문서 삭제 (DELETE /_doc/1)
DELETE /products/_doc/1
✅ ID가 1인 문서를 삭제.
Match, Term, Bool Query 기본 사용법
Elasticsearch에서는 다양한 검색 쿼리를 지원하며, 가장 기본적인 검색 방법은 다음과 같습니다.
✅ (1) Match Query (전문 검색)
- 텍스트 필드(text 타입)에 대해 형태소 분석을 수행한 후 검색.
- 자연어 검색에 적합.
GET /products/_search
{
"query": {
"match": {
"name": "Elasticsearch 책"
}
}
}
✅ "name" 필드에서 "Elasticsearch 책"과 관련된 문서를 검색.
✅ (2) Term Query (정확한 값 검색)
- keyword, integer, boolean 필드에 대해 정확한 일치 검색 수행.
- 형태소 분석을 적용하지 않음.
GET /products/_search
{
"query": {
"term": {
"category": "IT"
}
}
}
✅ "category" 필드 값이 정확히 "IT"인 문서만 검색.
✅ (3) Bool Query (복합 검색)
- 여러 개의 검색 조건을 조합할 때 사용.
- must, should, must_not, filter 조건을 조합 가능.
GET /products/_search
{
"query": {
"bool": {
"must": [
{ "match": { "name": "Elasticsearch" } },
{ "term": { "category": "IT" } }
],
"must_not": [
{ "term": { "stock": false } }
],
"filter": [
{ "range": { "price": { "gte": 20000, "lte": 50000 } } }
]
}
}
}
✅ 검색 조건 조합
- "must" → name에 "Elasticsearch"가 포함되고, category가 "IT"인 문서.
- "must_not" → stock이 false인 문서는 제외.
- "filter" → 가격이 20,000 ~ 50,000 사이인 문서만 포함.
색인, 검색, 업데이트, 삭제 정리
연산 | HTTP 메서드 | 예제 |
문서 색인 (저장) | PUT | PUT /products/_doc/1 |
전체 문서 검색 | GET | GET /products/_search |
조건 검색 | GET | GET /products/_search { "query": { "match": { "name": "Elasticsearch" } } } |
문서 업데이트 | POST | POST /products/_update/1 { "doc": { "price": 28000 } } |
문서 삭제 | DELETE | DELETE /products/_doc/1 |
결론
- 색인(Indexing)은 데이터를 저장하는 과정이며, JSON 문서 형태로 저장됨.
- 문서 검색은 _search API를 사용하며, 다양한 쿼리(Query DSL)를 활용 가능.
- Match Query(전문 검색), Term Query(정확한 검색), Bool Query(복합 검색) 등 기본적인 검색 방식 제공.
- 업데이트 및 삭제 API를 사용하여 문서를 수정 또는 제거 가능.
'Elastic Search' 카테고리의 다른 글
[LV 3] Ingest Pipeline & Reindex API (0) | 2025.02.02 |
---|---|
[LV 2] 쿼리 DSL (Query DSL) 활용 (0) | 2025.02.02 |
[LV 2] 인덱스(Index)와 매핑(Mapping) (0) | 2025.02.02 |
[LV 1] Elasticsearch 설치 및 기본 환경 설정 (1) | 2025.02.01 |
[LV 1] 기본 아키텍처 이해 (0) | 2025.02.01 |