Elasticsearch에서 인덱스를 만들고 타입을 지정하여 데이터를 삽입하는 과정을 정리해보자. elasticsearch는 Restful API가 지원되기 때문에 BSL 쿼리를 이용하여 쉽게 데이터를 조작할 수 있다.
인덱스 생성
Methd : put
URLI : /{indexname}?pretty
Method : GET
URI : _cat/indices?v
kibana dev-tool에서 customer 인덱스가 생성된 것을 확인할 수 있다.
Method : PUT
URI : /{indexname}/{typename}/[documentid]?pretty
만약 documentid를 넣지 않으면 랜덤으로 만들어서 삽입된다.
Method : GET
URI : /{indexname}/{typename}/{documentid}
데이터를 조회해보면 _source에 삽입한 데이터가 들어가 있는것을 확인할 수 있다
Method : DELETE
URI : /{indexname}?pretty
데이터 삭제
Method : DELETE
URI : /{indexname}/{typename}/{documentid}?prettry
데이터 수정
Method : POST
URI : /{indexname}/{typename}/{documentid}/_update?pretty
변경된 내용 확인
Bulk update
Method : POST
URI : /{indexname}/{typename}/_bulk?pretty
여러가지 쿼리를 한번에 수행할 수 있다.
수행 결과
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | { "took": 16, "errors": false, "items": [ { "index": { "_index": "customer", "_type": "wedul", "_id": "2", "_version": 1, "result": "created", "_shards": { "total": 2, "successful": 1, "failed": 0 }, "_seq_no": 0, "_primary_term": 1, "status": 201 } }, { "index": { "_index": "customer", "_type": "wedul", "_id": "3", "_version": 1, "result": "created", "_shards": { "total": 2, "successful": 1, "failed": 0 }, "_seq_no": 0, "_primary_term": 1, "status": 201 } }, { "update": { "_index": "customer", "_type": "wedul", "_id": "1", "_version": 3, "result": "updated", "_shards": { "total": 2, "successful": 1, "failed": 0 }, "_seq_no": 4, "_primary_term": 1, "status": 200 } }, { "delete": { "_index": "customer", "_type": "wedul", "_id": "2", "_version": 2, "result": "deleted", "_shards": { "total": 2, "successful": 1, "failed": 0 }, "_seq_no": 1, "_primary_term": 1, "status": 200 } } ] } | cs |
검색 API
기본적으로 검색 실행방법은 REST 요청 URI를 통해 검색 매개변수를 보내는 방법과 REST 요청 본문을 통해 보내는 방식이있다. (REST 요청 본문으로 보내는 것은 위에서 확인 하였음.) 이 두가지 방식 중에 요청 본문 방식을 이용하는것이 더 효율적이다. 왜냐하면 URI를 조작해서 검색을 하는 것 보다 본문에 내용을 조작해서 수행하는 것이 더 유연하게 수정할 수 있다.
주소로 요청하기 위해서는 _search 엔드포인트를 사용해서 엑세스 해야한다.
그럼 먼저 주소 요청을 진행해보자.
URI 요청을 통한 검색
Method : GET
URI : /customer/_search?q=*&sort=age:desc&pretty
q=* : Elasticssearch에게 색인의 모든 문서를 비교하여 일치 여부를 확인 하라고 표시.
sort={fieldname}:order_type(desc | asc) : 정렬을 사용할 필드와 정렬방식을 지정
결과
- took : Elasticsearch가 검색하는데 걸린시간
- timed_out : 검색 시간 초과 여부
- _shards : 검색한 샤드 수 및 검색에 성공/실패한 샤드 수
- hits: 검색 결과 (Array로 순서대로 검색결과가 출력)
- hits > total : 총 검색 결과
- hits > hits : 검색 결과의 실제 배열
- hits > sort : 결과의 정렬 키
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | { "took": 1, "timed_out": false, "_shards": { "total": 5, "successful": 5, "skipped": 0, "failed": 0 }, "hits": { "total": 2, "max_score": null, "hits": [ { "_index": "customer", "_type": "wedul", "_id": "3", "_score": null, "_source": { "name": "kskim", "age": 35, "add": "Gwang ju" }, "sort": [ 35 ] }, { "_index": "customer", "_type": "wedul", "_id": "1", "_score": null, "_source": { "name": "wedul babo", "age": 28, "addr": "seoul" }, "sort": [ 28 ] } ] } } | cs |
#본문 요청 검색
Method : GET
URI : /{indexname}/_search_pretty
나머지 조건은 body에 삽입
1 2 3 4 5 6 7 | GET /customer/_search?pretty { "query": { "match_all": {} }, "sort": [ { "age": "desc" } ] } | cs |
다음번에는 더 자세한 검색 조건을 수행해보자.
'데이터베이스 > Elasticsearch' 카테고리의 다른 글
Elasticsearch 한글 형태소 설치 및 사용 (0) | 2018.10.06 |
---|---|
elasticsearch multi type 기능 제거 이슈 (0) | 2018.10.06 |
Elasticsearch 질의 DSL 정리 (0) | 2018.10.06 |
Docker Container에 Elasticsearch와 데이터 시각화 kibana 설치 및 연동 (0) | 2018.10.05 |
Elasticsearch 기본 정리 (0) | 2018.10.05 |