1. 개요
엘라스틱서치에 데이터를 삽입, 수정, 삭제를 해 보도록 하겠습니다. 참고로, 엘라스틱서치의 모든 요청은 REST API를 사용합니다. 엘라스틱서치의 경우 버전마다 변경사항이 매우 큽니다. 때문에, 버전을 잘 확인해보시기 바랍니다.
💡 이 글은 7.0 ~ 8.X 사이의 버전을 타켓으로 하고 있습니다.
추가로, 제 엘라스틱서치의 버전은 8.7입니다.
엘라스틱 8.0이후 버전은 Security로 인해 모든 요청에 사용자 인증이 필요합니다.
때문에 저와 같이 Postman을 쓰시는 분들은 아래 그림과 같이 인증 셋팅이 필요합니다.
💡 자세한 인증 사항은 https://ksb-dev.tistory.com/309 에서 알 수 있습니다.
2. 삽입
엘라스틱서치에 데이터를 삽입하기 위해서는 PUT 요청으로 아래와 같이 보내야 합니다.
PUT <인덱스>/_doc/<다큐먼트번호>
💡 엘라스틱서치에서 인덱스는 RDB의 테이블이라 생각하시면 됩니다. 다큐먼트는 데이터가 저장되는 최소 단위입니다.
[Request]
PUT ksb/_doc/1
{
"id" : "1",
"message" : "1번 데이터 입니다."
}
[Response]
{
"_index": "ksb", # 해당 데이터가 삽입되는 인덱스 이름입니다. 인덱스는 자동적으로 생성된 것입니다.
"_id": "1", # 다큐먼트번호 입니다.
"_version": 1,
"result": "created", # 생성되었다는 것을 의미합니다.
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 0,
"_primary_term": 1
}
3. 조회
엘라스틱서치에 데이터를 조회하기 위해서는 GET 요청으로 아래와 같이 보내야 합니다.
GET <인덱스>/_doc/<다큐먼트번호>
[Request]
GET ksb/_doc/1
[Response]
{
"_index": "ksb",
"_id": "1",
"_version": 1,
"_seq_no": 0,
"_primary_term": 1,
"found": true,
"_source": { # 조회된 데이터가 표시 됩니다.
"id": "1",
"message": "1번 데이터 입니다."
}
}
4. 수정
엘라스틱서치에 데이터를 수정하기 위해서는 POST 요청으로 아래와 같이 보내야 합니다.
POST <인덱스>/_update/<다큐먼트번호>
💡 엘라스틱서치는 수정의 요청이 들어와도 내부적으로는 새로운 데이터를 생성하여 덮어 씌웁니다.
[Request]
POST ksb/_update/1
{
"doc" : {
"message" : "0번 데이터 입니다."
}
}
[Response]
{
"_index": "ksb",
"_id": "1",
"_version": 2, # 수정되면 버전이 올라가서 이전 버전의 데이를 덮어 씌웁니다.
"result": "updated", # 데이터 수정이 발생되었다는 것을 의미합니다.
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 1,
"_primary_term": 1
}
5. 삭제
엘라스틱서치에 데이터를 삭제하기 위해서는 DELETE 요청으로 아래와 같이 보내야 합니다.
DELETE <인덱스>/_doc/<다큐먼트번호>
[Request]
DELETE ksb/_doc/1
[Response]
{
"_index": "ksb",
"_id": "1",
"_version": 3, # 버전이 올라갔습니다.
"result": "deleted", # 데이터가 삭제되었다는 것을 의미합니다.
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 2,
"_primary_term": 1
}
6. _bulk API
엘라스틱서치의 여러 명령어를 배치로 수행하기 위해 _bulk API가 제공됩니다. _bulk API로 index, create, update, delete의 동작이 가능하며 delete를 제외하고는 명령문과 데이터문이 순서대로 입력해야 합니다. delete문은 내용이 필요 없어 명령문만 존재합니다.
요청은 아래와 같습니다.
POST _bulk
[Request]
POST _bulk
{"index":{"_index":"ksb", "_id":"1"}}
{"field":"one"}
{"index":{"_index":"ksb", "_id":"2"}}
{"field":"two"}
{"delete":{"_index":"ksb", "_id":"2"}}
{"create":{"_index":"ksb", "_id":"3"}}
{"field":"three"}
{"update":{"_index":"ksb", "_id":"1"}}
{"doc":{"field":"two"}}
💡 맨 마지막줄에 공백(엔터)가 있어야 합니다.
[Response]
{
"took": 145,
"errors": false,
"items": [
{
"index": {
"_index": "ksb",
"_id": "1",
"_version": 1,
"result": "created",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 3,
"_primary_term": 1,
"status": 201
}
},
{
"index": {
"_index": "ksb",
"_id": "2",
"_version": 1,
"result": "created",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 4,
"_primary_term": 1,
"status": 201
}
},
{
"delete": {
"_index": "ksb",
"_id": "2",
"_version": 2,
"result": "deleted",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 5,
"_primary_term": 1,
"status": 200
}
},
{
"create": {
"_index": "ksb",
"_id": "3",
"_version": 1,
"result": "created",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 6,
"_primary_term": 1,
"status": 201
}
},
{
"update": {
"_index": "ksb",
"_id": "1",
"_version": 2,
"result": "updated",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 7,
"_primary_term": 1,
"status": 200
}
}
]
}
7. 마무리
엘라스틱서치의 아주 기본적인 CRUD 동작만을 실습했습니다.
어렵거나 복잡한 내용을 제외하려다 보니 많은 내용이 빠질 수 밖에 없었는데, 자세한 내용을 알고 싶은 문은 이 글을 작성할 때 참고한 아래 링크를 통해 확인하시기 바랍니다.
https://esbook.kimjmin.net/04-data
'엘라스틱 서치' 카테고리의 다른 글
스프링부트로 엘라스틱서치 쿼리 날리기 (0) | 2023.06.09 |
---|---|
ELK, Mysql, Kafka 구축 및 연동 (0) | 2023.06.02 |
스프링부트 테스트와 엘라스틱서치 테스트 컨테이너 (0) | 2023.05.27 |
엘라스틱서치 검색 Query DSL (0) | 2023.05.18 |
엘라스틱서치 8.X 도커로 무작성 실행해보기 (0) | 2023.04.25 |