Elasticsearch (ELK)/Elasticsearch
5. Elasticsearch 데이터 처리 - REST API
Velody
2020. 5. 26. 15:35
RestFul하지 않은 시스템에서의 처리
입력 : http://user.com/input.jsp?name=kim&age=38&gender=m
조회 : http://user.com/get.jsp?name=kim
삭제 : http://user.com/delete.jsp?name=kim
RestFul한 시스템에서의 처리
입력 : PUT http://user.com/kim -d {"name":"kim", "age":38, "gender":"m"}
조회 : GET http://user.com/kim
삭제 : DELETE http://user.com/kim
CRUD - 입력, 조회, 수정, 삭제
7.X버전 이후부터는 도큐먼트 타입이란 개념이 사라지고 _doc이란 고정자를 사용한다.
http://<호스트>:<포트>/<인덱스>/_doc/<도큐먼트 id>
입력(PUT)
_doc : 같은 Document가 존재한다면 덮어쓴다
_create : 같은 Document가 존재한다면 덮어쓰지않고 409 Return
PUT my_index/_doc/1
{
"name":"Jongmin Kim",
"message":"안녕하세요 Elasticsearch"
}
PUT my_index/_create/1
{
"name":"Jongmin Kim",
"message":"안녕하세요 Elasticsearch"
}
조회(GET)
결과는 _source를 통해 보여준다
GET my_index/_doc/1
삭제(Delete)
인덱스는 살아있으나 없는 도큐먼트를 검색하면 "found" : false 가 리턴 되고
만약 인덱스 자체가 죽어있으면 404 Code Return이 발생된다.
DELETE my_index/_doc/1 //도큐먼트 삭제
DELETE my_index //인덱스 전체삭제
수정(POST)
POST사용 시 <인덱스>/_doc 까지만 입력된다면 해당 도큐먼트의 id는 자동으로 설정되어 추가가 된다
//POST 명령으로 my_index/_doc 도큐먼트 입력
POST my_index/_doc
{
"name":"Jongmin Kim",
"message":"안녕하세요 Elasticsearch"
}
POST 명령으로 도큐먼트 입력 결과 - 도큐먼트 아이디 자동 생성
{
"_index" : "my_index",
"_type" : "_doc",
"_id" : "ZuFv12wBspWtEG13dOut",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 0,
"_primary_term" : 1
}
_update : 특정 Field만 업데이트
POST my_index/_update/1
{
"doc": {
"message":"안녕하세요 Kibana"
}
}
Bulk API
Gereral한 Bulk API Call
POST _bulk
{"index":{"_index":"test", "_id":"1"}}
{"field":"value one"}
{"index":{"_index":"test", "_id":"2"}}
{"field":"value two"}
{"delete":{"_index":"test", "_id":"2"}}
{"create":{"_index":"test", "_id":"3"}}
{"field":"value three"}
{"update":{"_index":"test", "_id":"1"}}
{"doc":{"field":"value two"}}
//모든 명령어가 동일할 경우에는 아래와 같이 가능
POST test/_bulk
{"index":{"_id":"1"}}
{"field":"value one"}
{"index":{"_id":"2"}}
{"field":"value two"}
{"delete":{"_id":"2"}}
{"create":{"_id":"3"}}
{"field":"value three"}
{"update":{"_id":"1"}}
{"doc":{"field":"value two"}}
파일을 이용한 Bulk API Call
curl -XPOST "http://localhost:9200/_bulk" -H 'Content-Type: application/json' --data-binary @bulk.json
Search
_search를 통해 그리고 q Parameter를 사용하여 검색한다 (q에 AND, OR, NOT 사용가능)
URI 검색
GET test/_search?q=value
//AND를 이용한 검색(AND, OR, NOT 사용가능)
GET test/_search?q=value AND three
//특정 필드에서 검색하고 싶다면
GET test/_search?q=field:value
Data Body 검색
GET test/_search
{
"query": {
"match": {
"field": "value"
}
}
}
Multitenancy 검색
// 쉼표 검색
GET logs-2018-01,2018-02,2018-03/_search
// 와일드카드 검색
GET logs-2018-*/_search