인덱스의 구조는 이전 template 설정과 같습니다.
https://stdhsw.tistory.com/entry/Elasticsearch%EC%9D%98-Index-template-%EC%84%A4%EC%A0%95
현재 인덱스 구조
필드 | 타입 |
user_id | long |
level | keyword |
timestamp | long |
action | keyword |
message | text |
도큐먼트 생성하기
Elasticsearch index에 document를 생성하여 각각의 필드에 값을 설정하고 index에 데이터를 넣습니다.
user 1 추가하기
api | PUT http://localhost:9200/my-log-index-2021-08-24/_doc/1 |
header | Content-type: application/json |
body | { "user_id": 1, "level": "info", "timestamp": 1629792520, "action": "open_file", "message": "user file open" } |
user 2 추가하기
api | PUT http://localhost:9200/my-log-index-2021-08-24/_doc/2 |
header | Content-type: application/json |
body | { "user_id": 2, "level": "info", "timestamp": 1629792525, "action": "open_socket", "message": "user socket open" } |
덮어쓰기를 방지하기 위한 데이터 생성방법
기존처럼 PUT http://localhost:9200/my-log-index-2021-08-24/_doc/2 을 사용하여 데이터를 생성한다면 기존에 도큐먼트 아이디 2가 존재한다면 기존의 데이터는 지워지고 현재 데이터가 덮어써지는 문제가 발생합니다. 이러한 문제를 해결하기 위해 _create를 통하여 데이터를 생성할 수 있습니다.
만약 같은 도큐먼트 아이디가 존재 할 경우 status 409 version_conflict_engine_exception 에러를 반환합니다.
api | POST http://localhost:9200/my-log-index-2021-08-24/_create/2 |
header | Content-type: application/json |
body | { "user_id": 3, "level": "info", "timestamp": 1629792540, "action": "close_file", "message": "user close open" } |
도큐먼트 조회하기
지금까지 입력한 데이터를 조회하도록 하겠습니다.
인덱스에 모든 도큐먼트 조회하기
api | GET http://localhost:9200/my-log-index-2021-08-24/_search |
출력 결과
특정 도큐먼트 아이디를 이용하여 조회하기
이번에는 인덱스의 모든 데이터가 아닌 도큐먼트 아이디를 이용하여 해당 도큐먼트의 값을 가져오도록 하겠습니다.
api | GET http://localhost:9200/my-log-index-2021-08-24/_doc/1 |
출력 결과
조건을 이용하여 데이터 조회하기
이번에는 특정 조건에 만족하는 데이터를 찾아 조회하도록 하겠습니다.
action 필드의 값이 "open_socket"인 것을 조회하도록 하겠습니다.
api | GET http://localhost:9200/my-log-index-2021-08-24/_search?q=action:open_socket |
출력 결과
도큐먼트 수정하기
데이터를 수정하기 전에 먼저 version의 값을 확인하면 좋습니다.
api | GET http://localhost:9200/my-log-index-2021-08-24/_doc/2 |
출력 결과
출력 결과를 보면 알 수 있듯이 현재 수정을 하지 않은 상태에서는 version이 1입니다.
도큐먼트 아이디를 이용하여 수정하기
도큐먼트 수정하는 것도 조회와 마찬가지로 도큐먼트 아이디를 이용하여 level 필드의 값을 "debug"로 수정하도록 하겠습니다.
_update를 사용하면 기존에 도큐먼트 아이디가 존재하지 않는 다면 에러가 발생합니다.
api | POST http://localhost:9200/my-log-index-2021-08-24/_update/2 |
header | Content-type: application/json |
body | { "doc": { "level": "debug" } } |
버전 확인하기
api | GET http://localhost:9200/my-log-index-2021-08-24/_doc/2 |
출력 결과
버전이 2로 증가하였습니다. 버전은 해당 도큐먼트 아이디의 변경된 횟수를 의미합니다. 버전을 통하여 해당 도큐먼트의 아이디가 수정된 적이 있는지 확인할 수 있습니다.
도큐먼트 개수 측정하기
인덱스의 모든 도큐먼트 개수 측정하기
api | GET http://localhost:9200/my-log-index-2021-08-24/_count |
특정 조건을 이용하여 개수 측정하기
level 필드에 값이 "debug"인 도큐먼트 개수 측정
api | GET http://localhost:9200/my-log-index-2021-08-24/_count?q=level:debug |
도큐먼트 삭제하기
특정 도큐먼트 삭제하기
api | DELETE http://localhost:9200/my-log-index-2021-08-24/_doc/2 |
인덱스 삭제하기
인덱스를 삭제하여 인덱스의 모든 값을 삭제합니다.
api | DELETE http://localhost:9200/my-log-index-2021-08-24 |
'Elasticsearch > Elasticsearch 데이터' 카테고리의 다른 글
Elasticsearch Array 형식으로 저장하기 (0) | 2021.09.01 |
---|---|
Elasticsearch Object 형식으로 저장하기 (0) | 2021.08.31 |
Elasticsearch bulk 배치 처리 (0) | 2021.08.30 |
Elasticsearch의 reindex (0) | 2021.08.28 |
Elasticsearch의 Index ilm policy로 일정기간 지나면 인덱스 삭제하기 (0) | 2021.08.25 |