인덱스 생성 및 데이터 삽입

Elasticsearch에서 인덱스를 만들고 타입을 지정하여 데이터를 삽입하는 과정을 정리해보자. elasticsearch는 Restful API가 지원되기 때문에 BSL 쿼리를 이용하여 쉽게 데이터를 조작할 수 있다.


인덱스 생성

Methd : put
URLI : /{indexname}?pretty


생성된 인덱스 확인

Method : GET
URI : _cat/indices?v
kibana dev-tool에서 customer 인덱스가 생성된 것을 확인할 수 있다.


타입, Document 생성 및 데이터 추가

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


다음번에는 더 자세한 검색 조건을 수행해보자.

댓글()