1. 개요
RDB를 하다가 ElasticSearch를 찾아보는데, 개념 자체가 RDB랑은 많이 달라서 최대한 알기 쉽게끔 필요한 기능만 정리를 해보려고 이 글을 작성해봅니다.
클러스터, 샤드랑 노드, 인덱스, 다큐먼트 등 개념적인 부분은 이 글에서는 다루지 않겠고, 아래 가이드북 링크를 참고해주시길 바랍니다.
https://esbook.kimjmin.net/03-cluster/3.2-index-and-shards
ElasticSearch 버전은 7.0버전 이상의 버전으로 진행합니다. 7.0버전부터 type이 사라졌기 때문입니다.
2. 클러스터 관련 Rest API
1) 클러스터 상태 조회
# curl -XGET http://localhost:9200/_cluster/health?pretty=true
* status: yellow = 모든 데이터가 읽기/쓰기 가능한 상태입니다. 다만, replica shard(복제 샤드)가 배정되지 않은 상태이므로 검색 성능에 영향이 있을 수 있습니다를 알려주는 상태 표시입니다. 복제 샤드가 있으면 초록색으로 나옵니다.
2) 클러스터 인덱스 조회
# curl -XGET http://localhost:9200/_cat/indices?v
# curl -XGET http://localhost:9200/_cat/shards?v
예제들 가운데서 _cat이라는 url 속성이 사용자가 생성한 인덱스인줄 알았는데, elastic search에서 제공하는 고정된 기본 기능입니다!
* 인덱스라는 단어가 여러 뜻으로 사용되기 때문에 데이터 저장 단위인 인덱스는 인디시즈(indices)라고 표현하기도 합니다.
3) index 생성
# curl -XPUT 'localhost:9200/test?pretty'
test라는 인덱스를 생성합니다.
RDB와 다르게 create, insert 이런 문법은 사용하지 않고 PUT REST API를 통해 생성합니다.
* pretty는 결과(response)를 잘 정리해서 보여주는 옵션입니다.
* acknowledged : true면 결과가 성공되었다는 의미입니다.
# curl -XGET http://localhost:9200/_cat/indices?v
인덱스를 생성한 후, 2번의 인덱스를 다시 조회해봅니다.
4) document 생성(PUT)
# curl -XPUT 'localhost:9200/test2/_doc/1?pretty' -H 'Content-Type: application/json' -d '{
"name": "james"
}'
PUT REST API를 이용해서 document를 생성합니다.
test2라는 index에 id는 1인 곳에 name이 james라는 데이터를 생성했습니다.
* PostMan이라는 프로그램을 사용하고 있습니다.
* 동일한 URL에 다른 내용의 document를 입력하게 되면 위와 같이 "result" : "update"라는 결과를 받게됩니다.
5) Document 조회 (GET)
데이터가 생성이 되었다면, 해당 인덱스의 document를 조회해봅니다.
# curl -XGET 'http://localhost:9200/test2/_doc/1?pretty'
* url에 있는 _search는 query DSL으로 사용되는 API이며, 뒤에 query를 명시함에 따라 다른 결과를 받아볼 수 있습니다.
Elasticsearch에서는 단일 도큐먼트별로 고유한 URL을 갖습니다. 도큐먼트에 접근하는 URL은
http://<호스트>:<포트>/<인덱스>/_doc/<도큐먼트 id>
구조로 되어 있습니다.
6.x 이전 까지는, http://<호스트>:<포트>/<인덱스>/<도큐먼트 타입>/<도큐먼트 id> 구조였으나,
Elasticsearch 7.0 부터는 도큐먼트 타입 개념이 사라지고 대신 고정자 _doc 으로 접근해야 합니다!
참고 사이트
https://esbook.kimjmin.net/04-data/4.2-crud