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