03.Index, Document CRUD

1. Overview

이번 문서에서는 elasticsearch의 Index, Document를 다루는 방법에 대해 알아보겠습니다.

2. Prerequisites

환경 정보
centOS : v7.0
elasticsearch : v6.7.1

3. Index CRUD

Elasticsearch에서 Index는 데이터인 Document를 담고있는 논리적 공간입니다. RDBMS에서 table과 비슷한 개념입니다.

3.1 Create Index

customer라는 이름을 가진 Index를 생성해봅시다.

$ curl -XPUT 'localhost:9200/customer?pretty'

image
"acknowledged: true"이면, 작업이 성공되었다는 뜻입니다.

3.2 List Index

현재 클러스터의 모든 Index 리스트를 출력합니다.

$ curl -XGET localhost:9200/_cat/indices?v

image
3.1에서 만들었던 customer Index가 출력되는 것을 확인할 수 있습니다.

Index 하나의 정보를 보고싶으면 다음 명령어를 통해 확인할 수 있습니다.

$ curl -XGET localhost:9200/customer/?pretty

image

3.3 Update Index

Index의 setting을 업데이트하기전에 기본적으로 어떤 setting을 가지고 있는지 보겠습니다.

$ curl -XGET localhost:9200/customer/_settings?pretty

image

Index를 생성한 날짜와 샤드와 레플리카의 수 등을 확인할 수 있습니다.

그러면 이 customer Index의 레플리카 수를 1개에서 2개로 늘려보겠습니다.

$ curl -XPUT localhost:9200/customer/_settings -H 'Content-Type: application/json' -d'
{
    "index" : {
        "number_of_replicas" : 2
    }
}'

image

바뀐 결과를 확인해보면, replica의 개수가 2로 업데이트된 것을 확인할 수 있습니다.
image

3.4 Delete Index

Index를 삭제하는 명령어는 다음과 같습니다.

$ curl -XDELETE localhost:9200/customer?pretty

image
내부에 document가 있어도 경고없이 지워지니 삭제할때는 조심하시기 바랍니다.

4. Document CRUD

DocumentElasticsearch에 쌓이는 데이터이며 RDBMS의 Row와 비슷한 개념입니다.

customer2라는 Index를 만들고 진행하겠습니다.

4.1 Create Document

DocumentIndex에 생성하는 것을 Indexing(색인화)이라고 합니다.

Document를 생성하는 방법은 크게 두가지가 있습니다.

첫번째 방법은 커맨드라인에 json형식의 document를 적는 방법, 두번째는 json파일을 만들어 생성하는 방법이 있습니다.

customer2 Index에 name속성이 gru인 document를 생성하는 것을 두가지 방법으로 보여드리겠습니다.

첫번째 방법: 커맨드라인으로

$ curl -XPOST localhost:9200/customer2/_doc/1?pretty -H 'Content-Type: application/json' -d '
{
"name": "gru"
}'

image

API의 구조는 이렇습니다.

$ localhost:9200/{index_name}/_doc/{id}

만약 id부분을 빼고 /_doc?pretty -H ~~ 이렇게 입력한다면 id부분에 랜덤한 값이 들어가게 됩니다.

(예시) image
id부분에 랜덤값이 들어간것을 확인할 수 있습니다.

두번째 방법: json파일로

$ vim customer2data.json
{
"name": "gru3",
"address": "인천",
"phone": "010-123-1234",
"reg_date": "2019-03-31"
}

생성할 document의 정보를 담고있는 json파일을 생성합니다.

$ curl -XPOST localhost:9200/customer2/_doc/2?pretty -H 'Content-Type: application/json' -d @customer2data.json

image

4.2 Search Document

Document를 생성했으니 만든 Doc들을 확인해봐야겠습니다.
ElasticSearch가 검색엔진이니만큼 다양한 검색 쿼리들이 존재하지만 이 문서에서는 기본적인 조회방법만 소개하겠습니다.

특정 Index에서 검색

특정 Index에서 doc를 출력하는 방법입니다.

$ curl -XGET 'localhost:9200/customer2/_search?pretty'

image
위에서 생성했던 Doc들을 확인할 수 있습니다.

전체 Index에서 검색

본문을 그대로 따라왔다면 index가 1개뿐일겁니다.
하나 새로 생성해주고 doc를 몇개 넣어준 뒤 이 단계를 따라해주세요.

저는 customer인덱스를 새로 만들어서 다음과 같은 doc형태로 넣겠습니다.

{
    "name":"hololy111"
}
$ curl -XGET 'localhost:9200/_all/_search?pretty'

image
전체 index에서 검색이 되는것을 확인할 수 있습니다.

id로 검색

id로 특정 doc를 검색할 수 있습니다.

$ curl -XGET 'localhost:9200/customer2/_doc/2?pretty'

customer2 인덱스에서 id가 2인 doc를 찾은 결과입니다.

image

4.3 Update Document

Document를 수정하는 방법에 대해서 알아보겠습니다.

Document의 id를 수정할 Document의 id로 설정해주시고 입력하면 Update가 되는 것을 확인할 수 있습니다.

바로 위에서 search했던 문서의 (index : customer2, id: 2) name을 수정해보겠습니다.

$ curl -X POST "localhost:9200/customer2/_doc/2/_update?pretty" -H 'Content-Type: application/json' -d'
{
    "doc" : {
        "name" : "update-gru3"
    }
}'

image

수정하기전 :
image

수정 후:
image

name이 update-gru3으로 바뀐 것을 확인할 수 있습니다.

새로운 필드를 추가하기위해서는 추가하려는 필드를 적어서 update하면 됩니다.

curl -X POST "localhost:9200/customer2/_doc/2/_update?pretty" -H 'Content-Type: application/json' -d'
{
   "doc" : {
       "age" : "24"
   }
}'

image
age 필드가 추가된 것을 확인할 수 있습니다.

4.4 Delete Document

Document를 삭제하는 방법을 알아보겠습니다.

customer2 Indexid가 2인 Document를 삭제하는 커맨드입니다.

$ curl -XDELETE 'localhost:9200/customer2/_doc/2?pretty'

image

제대로 삭제됬는지 확인해보기 위해 id가 2인 document를 찾아보겠습니다.
image

제대로 삭제되었습니다!


댓글남기기