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'
"acknowledged: true"
이면, 작업이 성공되었다는 뜻입니다.
3.2 List Index
현재 클러스터의 모든 Index 리스트를 출력합니다.
$ curl -XGET localhost:9200/_cat/indices?v
3.1에서 만들었던 customer Index
가 출력되는 것을 확인할 수 있습니다.
Index 하나의 정보를 보고싶으면 다음 명령어를 통해 확인할 수 있습니다.
$ curl -XGET localhost:9200/customer/?pretty
3.3 Update Index
Index
의 setting을 업데이트하기전에 기본적으로 어떤 setting을 가지고 있는지 보겠습니다.
$ curl -XGET localhost:9200/customer/_settings?pretty
이 Index
를 생성한 날짜와 샤드와 레플리카의 수 등을 확인할 수 있습니다.
그러면 이 customer Index
의 레플리카 수를 1개에서 2개로 늘려보겠습니다.
$ curl -XPUT localhost:9200/customer/_settings -H 'Content-Type: application/json' -d'
{
"index" : {
"number_of_replicas" : 2
}
}'
바뀐 결과를 확인해보면, replica의 개수가 2로 업데이트된 것을 확인할 수 있습니다.
3.4 Delete Index
Index
를 삭제하는 명령어는 다음과 같습니다.
$ curl -XDELETE localhost:9200/customer?pretty
내부에 document가 있어도 경고없이 지워지니 삭제할때는 조심하시기 바랍니다.
4. Document CRUD
Document
는 Elasticsearch
에 쌓이는 데이터이며 RDBMS의 Row와 비슷한 개념입니다.
customer2라는 Index를 만들고 진행하겠습니다.
4.1 Create Document
Document
를 Index
에 생성하는 것을 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"
}'
API의 구조는 이렇습니다.
$ localhost:9200/{index_name}/_doc/{id}
만약 id부분을 빼고 /_doc?pretty -H ~~ 이렇게 입력한다면 id부분에 랜덤한 값이 들어가게 됩니다.
(예시)
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
4.2 Search Document
Document
를 생성했으니 만든 Doc
들을 확인해봐야겠습니다.
ElasticSearch
가 검색엔진이니만큼 다양한 검색 쿼리들이 존재하지만 이 문서에서는 기본적인 조회방법만 소개하겠습니다.
특정 Index에서 검색
특정 Index에서 doc를 출력하는 방법입니다.
$ curl -XGET 'localhost:9200/customer2/_search?pretty'
위에서 생성했던 Doc들을 확인할 수 있습니다.
전체 Index에서 검색
본문을 그대로 따라왔다면 index가 1개뿐일겁니다.
하나 새로 생성해주고 doc를 몇개 넣어준 뒤 이 단계를 따라해주세요.
저는 customer인덱스를 새로 만들어서 다음과 같은 doc형태로 넣겠습니다.
{
"name":"hololy111"
}
$ curl -XGET 'localhost:9200/_all/_search?pretty'
전체 index에서 검색이 되는것을 확인할 수 있습니다.
id로 검색
id로 특정 doc를 검색할 수 있습니다.
$ curl -XGET 'localhost:9200/customer2/_doc/2?pretty'
customer2 인덱스에서 id가 2인 doc를 찾은 결과입니다.
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"
}
}'
수정하기전 :
수정 후:
name이 update-gru3으로 바뀐 것을 확인할 수 있습니다.
새로운 필드를 추가하기위해서는 추가하려는 필드를 적어서 update하면 됩니다.
curl -X POST "localhost:9200/customer2/_doc/2/_update?pretty" -H 'Content-Type: application/json' -d' { "doc" : { "age" : "24" } }'
age 필드가 추가된 것을 확인할 수 있습니다.
4.4 Delete Document
Document를 삭제하는 방법을 알아보겠습니다.
customer2 Index
의 id
가 2인 Document를 삭제하는 커맨드입니다.
$ curl -XDELETE 'localhost:9200/customer2/_doc/2?pretty'
제대로 삭제됬는지 확인해보기 위해 id
가 2인 document를 찾아보겠습니다.
제대로 삭제되었습니다!
댓글남기기