본문 바로가기

Monitoring/Elasticsearch

05. Document

CURL 을 사용한 경우 아래 사이트를 통해서 기본 사용법을 읽히면 된다.
 
 
 
 
Order Form
 
Elasticsearch 로 명령을 주는 형태는 아래와 같다.
 
<HTTP verb>  /<indexName>/<typeName>/<documentName> ...
 
 
 
Result
 
?pretty
 
를 붙여주면 Result Json 을 읽기 쉬운 모양으로 결과값이 리턴된다.
 
 
 
Creating an Index
 
document 는 인덱스 내부에 생성해야 하므로 먼저 index 를 만들어 보자.
 
인덱스를 생성할 때는 PUT 명령을 사용하며 
 
간단히 아래와 같은 방법으로 product 라는 이름의 Index 를 추가할 수 있다. 
 
결과값을 통해 index 로 product 가 지정되었음을 알 수 있다.
 
 
 
 
Add
 
인덱스를 추가하였으니 이제 인덱스에 들어갈 Document 를 생성해 보자.
 
INDEX/TYPE/Document 로 path 를 지정하는데 Document 이름은 따로 지정하지 않아도 된다.
 
입력할 Document 데이터는 json 형식으로 입력해야 한다. 
 
결과를 간단히 살펴보면 _index 가 product 이며 _type 은 default 로 지정이 되었고
 
documentID 는 UUID 로 발급이 되어 result 가 created 로 잘 생성이 된 것을 확인할 수 있다.
 
 
document 이름을 넣는 경우는 임의 발급된 UUID 가 아닌 지정된 이름이 _id 로 리턴됨을 알 수 있다.
 
 
 
 
Retrieve
 
GET 메소드를 사용하며 document ID 를 통해 조회할 수 있다.
 
결과로 document 가 속한 index, type, document ID 가 조회되며 
 
한번도 수정이 일어나지 않았기 때문에 version 이 1 이다. 
 
그리고 source 로 실제 내용이 조회된다.
 
 
 
 
Replace
 
PUT / POST 메서드를 사용해서 document 를 바꿔보자.
 
price 항목을 넣고 다시 조회해 보면 해당 내용이 바뀌었고
 
version 도 2 로 올라간 것을 확인할 수 있다.
 
 
 
 
Update
 
하나의 field 만 바꾸고자 한다면 POST /path/_update 를 사용하며
 
변경하거나 추가하고자 하는 항목을 doc field 내부에 넣어주면 된다.
 
 
 
 
Scripted Update
 
위처럼 price 항목을 직접 입력해 값을 바꾸려면 기존에 price 항목이 얼마인지 조회가 필요하다.
 
이렇게 하지 않고 그냥 기존 값에 +10 을 하려면 어떻게 해야 할까?
 
이를 위해 Elasticsearch 는 Scripted Update 라는 기능을 제공한다.
 
마찬가지로 POST /path/_update 를 사용한다.
 
다만 doc 대신 script 라는 구문을 키로 넣어주고야 하며 실제 바꾸고자 하는 field 의 풀 경로 앞에 
 
ctx. ( context 의 약자 ) 를 넣고 연산식을 넣으면 되겠다.
 
 
 
 
 
Upserts
 
일종의 예외처리로 해당 항목을 업데이트 할 수 없을때 지정될 값을 입력하면 된다.
 
아래와 같이 기존 document 를 지운다음 scripted update 를 시도시 price 라는 항목은 없을 것이다.
 
price 라는 항목이 없을때 upsert 항목중 price 가 있다면 이를 데이터로 입력하게 된다.
 
아래와 같이 테스트 해보자. 
 
document 를 지우고 upsert 를 넣은다음 조회해 보면
 
price 가 100 으로 upsert 항목을 통해 입력한 값이 나온다.
 
왜냐하면 document 가 지워졌기 때문에 price 항목이 존재하지 않기 때문이다.
 
 
이후 다시 동일한 구문을 실행후 조회하면 price 가 있기 때문에
 
price 항목에 10 이 더해져 110 이 나오게 된다.
 
 
 
 
Delete
 
DELETE 메소드를 사용해서 간단히 지우려면 document 의 ID 를 알아야 한다.
 
매치되는 항목이 있는 document 를 지우고자 한다면 어떻게 해야 할까?
 
이때 사용하는 API 가 POST /path/_delete_by_query 이다.
 
아래와 같이 사용한다.
 
 
결과로 price 가 100 인 특정 document 1개가 지워졌음을 알 수 있다.
 
 
 
Delete Index
 
Index 를 지우면 내부 document 들은 모두 삭제된다. 
 
 
 
 
Batch Processing
 
입력하고자 하는 데이터가 많거나 수정할 데이터가 많은 경우 하나씩 Request 를 날리면 효율이 떨어진다.
 
한번의 Request 로 모든 데이터를 한번에 날리는게 좋다.
 
이때 사용하는 것이 _bulk API 이다.
 
Document 생성시 간단히 POST /path/_bulk 를 넣고  입력하고자 하는
 
document ID 와 이에 따르는 값들을 넣어주면 된다.
 
입력항목은 줄바꿈 없이 한줄에 다 입력해야 한다.
 
 
Document 업데이트 시도 POST /path/_bulk 를 넣고 아래와 같이 입력값들을 꾸며주면 된다.
 
마찬가지로 수정 항목은 줄바꿈 없이 한줄에 다 입력해야 한다.
 
 
 
 

'Monitoring > Elasticsearch' 카테고리의 다른 글

07. Analyzer  (1) 2020.01.17
06. Mapping  (0) 2020.01.17
04. Cluster  (0) 2020.01.17
03. Install  (0) 2020.01.17
02. Overview  (0) 2020.01.17