반응형
Query DSL 전에 간단히 document 관련 API를 사용하는 방법을 다루고자 한다.
Document CRUD(Create Read Update Delete)는 HTTP Restful API를 통해 수행되며 완전히 같지는 않지만 다음과 같이 RDB의 SQL과 대응 가능하다.
Elasticsearch Restful API | RDB SQL |
GET | SELECT |
PUT | INSERT |
POST | UPDATE |
DELETE | DELETE |
curl을 통해 수행하며 자주 사용하는 옵션은 아래와 같다.
-u <username>:<password> : elasticsearch의 id/pass 계정정보
-H(--header) : HTTP Header 설정
-d(--data) : 전달할 data
--data-binary @<filename> : data를 binary로 처리되어 깨지지 않고 전송. @뒤는 전송할 파일
Document 조회
1개의 혹은 특정 Document 조회
Document의 index, type, id를 이용하여 조회 할수 있다.
curl -u <user>:<passwd> -XGET 127.0.0.1:9200/<index>/<type>/<id>?pretty
curl -u ***:*** -XGET 127.0.0.1:9200/test-index/_doc/HNch2Y8BhXQXL4awCXQu?pretty
{
"_index" : "test-index",
"_type" : "_doc",
"_id" : "HNch2Y8BhXQXL4awCXQu",
"_version" : 1,
"_seq_no" : 552113,
"_primary_term" : 1,
"_ignored" : [
"message.keyword"
],
"found" : true,
...
Index의 모든 Document 조회
"_search" 라는 search API를 사용하여 Index만 명시하면 Index의 모든 Document를 조회 할 수 있다.
curl -u <user>:<passwd> -XGET 127.0.0.1:9200/<index>/_search?pretty
curl -u ***:*** -XGET 127.0.0.1:9200/test-index/_search?pretty
{
"took" : 2,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 10000,
"relation" : "gte"
},
"max_score" : 1.0,
"hits" : [
...
_search API의 Respose Body (https://www.elastic.co/guide/en/elasticsearch/reference/current/search-search.html#search-api-response-body)
- took : Elasticsearch가 요청을 실행하는 데 걸린 시간(ms)
- time_out : true인 경우 검색이 완료되기 전에 timeout이 발생했으며 결과값은 부분적이거나 비어있을수 있다.
- _shards : request에 사용된 shard의 수
- hits - total - value : 매칭된 document 수
- hits - total - relation : 매칭된 value 값보다 큰지(gte) 같은지(eq)
- max_score : 매칭된 document 중 최고 score(Relevance score)
모든 Index의 모든 Document 조회
"_all" 라는 search AP를 사용하여 모든 index의 모든 document를 조회할 수 있다.
curl -u <user>:<passwd> -XGET 127.0.0.1:9200/_all/_search?pretty
curl -u ***:*** -XGET 127.0.0.1:9200/_all/_search?pretty | more
{
"took" : 4831,
"timed_out" : false,
"_shards" : {
"total" : 323,
"successful" : 323,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 10000,
"relation" : "gte"
},
"max_score" : 1.0,
"hits" : [
...
Document 추가
-d 옵션을 사용하여 추가하고자 하는 json data를 실어 POST method로 request 한다.
curl -u <user>:<passwd> -XPOST 127.0.0.1:9200/<index>/<type>/<id>?pretty \
-H 'Content-Type: application/json' \
-d '{ "asd": "sdf" }'
이때 <id>를 명시하지 않으면 무작위로 할당된다.
curl -u ***:*** -XPOST 127.0.0.1:9200/test/_doc?pretty -H 'Content-Type: application/json' -d '{ "asd": "sdf" }'
{
"_index" : "test",
"_type" : "_doc",
"_id" : "db4DbZABhXQXL4awugnh",
"_version" : 1,
"result" : "created",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 11,
"_primary_term" : 1
}
파일을 참조하여 추가
이때 1개의 Document만 추가 할 수 있다.
curl -u <user>:<passwd> -XPOST 'localhost:9200/<index>/<type>/<id>?pretty' \
-H 'Content-Type: application/json' \
-d @data.json
vim data.json
{
"asd": "sdf",
"qwe": "wer",
"zxc": "xcv",
"cvb": "vbn"
}
여러개의 Document를 bulk로 추가
"_bulk" 라는 search API를 사용하고 파일을 참조하여 binary로 전송한다.
curl -u <user>:<passwd> -XPOST 127.0.0.1:9200/<index>/_doc/_bulk?pretty \
-H "Content-Type: application/json" \
--data-binary @data.json
vim data.json
{"index":{}}
{"asd":"sdf"}
{"index":{}}
{"zxc":"xcv"}
...
Document 수정
curl -u ***:*** -XPOST 127.0.0.1:9200/<index>/<type>/<id>?pretty \
-H 'Content-Type: application/json' \
-d '{ "qw": "wer" }'
curl -u ***:*** -XGET 127.0.0.1:9200/test/_doc/CL4NbZABhXQXL4awx006?pretty
{
"_index" : "test",
"_type" : "_doc",
"_id" : "CL4NbZABhXQXL4awx006",
"_version" : 1,
"_seq_no" : 13,
"_primary_term" : 1,
"found" : true,
"_source" : {
"asd" : "sdf"
}
}
"asd": "sdf -> "qwe":"wer"로 수정하며, 이때 "version"이 1 -> 2로 변경된다.
curl -u ***:*** -XPOST 127.0.0.1:9200/test/_doc/CL4NbZABhXQXL4awx006?pretty -H 'Content-Type: application/json' -d '{ "qw": "wer" }'
{
"_index" : "test",
"_type" : "_doc",
"_id" : "CL4NbZABhXQXL4awx006",
"_version" : 2,
"result" : "updated",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 14,
"_primary_term" : 1
}
Document 삭제
1개의 Document 삭제
curl -u <user>:<passwd> -XDELETE 127.0.0.1:9200/<index>/<type>/<id>?pretty
curl -u ***:*** -XDELETE 127.0.0.1:9200/test/_doc/CL4NbZABhXQXL4awx006?pretty
{
"_index" : "test",
"_type" : "_doc",
"_id" : "CL4NbZABhXQXL4awx006",
"_version" : 3,
"result" : "deleted",
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"_seq_no" : 15,
"_primary_term" : 1
}
1개의 index 삭제
curl -u <user>:<passwd> -XDELETE 127.0.0.1:9200/<index>?pretty
curl -u ***:*** -XDELETE 127.0.0.1:9200/test?pretty
{
"acknowledged" : true
}
반응형