MacOS, 리눅스와 같은 유닉스 기반 운영체제에서는 curl 명령어로 간편하게 REST API 사용이 가능
Elasticsearch를 실행한 뒤 curl 명령을 이용해서 elasticsearch 클러스터의 최상위 경로를 호출하며 다음과 같이 클러스터의 상태 정보가 json 형식으로 리턴 됨
# GET 메서드로 elasticsearch 클러스터 조회
$ curl -XGET "<http://localhost:9200>"
Elasticsearch에서는 단일 도큐먼트별로 고유한 URL을 갖음.
도큐먼트에 접근하는 URL은 아래와 같은 구조
http://<호스트>:<포트>/<인덱스>/_doc/<도큐먼트 id>
6.x 이전 버전은 아래와 같은 구조
http://<호스트>:<포트>/<인덱스>/<도큐먼트 타입>/<도큐먼트 id>
였으나, Elasticsearch 7.0 부터는 도큐먼트 타입 개념이 사라지고 대신 고정자 _doc 으로 접근 해야 함
다음은 curl 도구를 이용해서 my_index 인덱스에 도큐먼트 id가 1인 데이터를 입력하는 예제
$ curl -XPUT "<http://localhost:9200/my_index/_doc/1>" -H 'Content-Type: application/json' -d'
{
"name":"DongRyul Min",
"message":"Hi Elasticsearch"
}'
동일한 URL에 다른 내용의 도큐먼트를 다시 입력하게 되면 기존 도큐먼트는 삭제되고 새로운 도큐먼트로 덮어씌워지게 됨
$ curl -XPUT "<http://localhost:9200/my_index/_doc/1>" -H 'Content-Type: application/json' -d'
{
"name":"DongRyul Min",
"message":"Hi Kibana"
}'
실수로 기존 도큐먼트가 덮어씌워지는 것을 방지하기 위해서는 입력 명령에 _doc 대신 _create 를 사용해서 새로운 도큐먼트의 입력만 허용하는 것이 가능
$ curl -XPUT "<http://localhost:9200/my_index/_create/1>" -H 'Content-Type: application/json' -d'
{
"name":"DongRyul Min",
"message":"Hi Logstash"
}'
입력하려는 도큐먼트 id에 이미 데이터가 있는 경우 아래와 같이 입력 오류가 나게 됨
# 이미 있는 도큐먼트인 경우 _create 명령 실행 불가
{
"error": {
"root_cause": [
{
"type": "version_conflict_engine_exception",
"reason": "[1]: version conflict, document already exists (current version [2])",
"index_uuid": "qYOJI9ELR2-HqVtgTeI9jw",
"shard": "0",
"index": "my_index"
}
],
"type": "version_conflict_engine_exception",
"reason": "[1]: version conflict, document already exists (current version [2])",
"index_uuid": "qYOJI9ELR2-HqVtgTeI9jw",
"shard": "0",
"index": "my_index"
},
"status": 409
}
GET 메서드로 가져올 도큐먼트의 URL을 입력하면 도큐먼트의 내용을 가져옴
$ curl -XGET "<http://localhost:9200/my_index/_doc/1>"