Spring Boot - ElasticSearch RestHighLevelClient Index관련 개발하기 (rest high level client CRUD)
1. 인덱스 생성하기
CreateIndexRequest request = new CreateIndexRequest("TestIndex"); // 인덱스 명
// mapping 설정
Map<String,Object> message = new HashMap<>();
message.put("type", "text");
Map<String,Object> properties = new HashMap<>();
properties.put("message", message);
Map<String,Object> mapping = new HashMap<>();
mapping.put("properties", properties);
request.mapping(mapping);
// 인덱스 생성
client.indices().create(request, RequestOptions.DEFAULT);
여기서 mapping 이란?
mapping은 관계형 데이터베이스(RBDMS)의 schema와 비슷한 개념으로, Elasticsearch의 index에 들어가는 데이터의 타입을 정의하는 것이다. 물론 그 외에도 수많은 기능을 설정하는 기능이 있지만 결국 mapping의 가장 중요한 역할은 데이터의 유형을 정의하고, 그 데이터를 어떻게 index 하는지 결정하는 것이다.
출처: https://dgkim5360.tistory.com/entry/mapping-management-of-elasticsearch-index [개발새발로그]
Elasticsearch 초보의 mapping 관리
Elasticsearch는 분산 시스템을 기본적으로 지원하는 전문 검색(full-text search) 오픈 소스 프로젝트로, "검색"을 쉽게 접근할 수 있게 해주는 강력한 도구이다. 나중에 전반적으로 설명할 기회가 있다
dgkim5360.tistory.com
저도 매핑에 대한 개념 없이 무조건 인덱스 만들고 데이터를 집어넣는 식으로 해서 지금까지 개발을 진행해 왔었는데, 이번 기회에 찾아볼 수 있었습니다 ㅎㅎ
결과 확인
els를 연동해놓은 kibana에서 결과를 확인할 수 있습니다. mappings 부분에 정상적으로 messsage의 type 이 text로 설정되었습니다.
2. 인덱스 삭제하기
DeleteIndexRequest request = new DeleteIndexRequest("testindex");
client.indices().delete(request, RequestOptions.DEFAULT);
결과 확인
방금 만들었던 testindex가 삭제되었습니다.
3. 문서 추가
방금 삭제하였던 testindex를 다시 생성하고 진행합니다.
IndexRequest request = new IndexRequest("testindex");
Map<String,Object> doc = new HashMap<>();
doc.put("message", "테스트입니다.");
request.source(doc);
client.index(request, RequestOptions.DEFAULT);
결과 확인
kibana로 indexpattern에 testindex를 등록하고 discover로 이동하여 결과를 확인할 수 있습니다. indexpattern을 등록하는 방법은
2021.09.24 - [Elastic Stack/Logstash] - MariaDB-Logstash-elasticsearch 연동하기
MariaDB-Logstash-elasticsearch 연동하기
Logstash로 MariaDB를 접속하여 데이터를 수집하고 elasticsearch에 연동하는 방법입니다. 1. Logstash conf 파일 작성 input { jdbc { jdbc_driver_library => "C:/dev/logstash-7.14.1/lib/mariadb-java-client-..
super-devstory.tistory.com
에서 확인하실 수 있습니다.
저는 두 번 넣었더니 두 번 들어갔네요 정상적으로 인덱스가 등록된 것을 확인할 수 있습니다.
4. 문서 조회
GetRequest request = new GetRequest("testindex", "Kf8NFH0BgwgVRf4nZwZL"); // 인덱스명, _id
GetResponse response = client.get(request, RequestOptions.DEFAULT);
if(response.isExists()) { // 문서있음
Map<String,Object> sourceAsMap = response.getSourceAsMap();
log.debug(sourceAsMap.toString());
} else { // 문서없음
log.debug("문서 없음!!");
}
_id는 위에 확인한 아이디 값으로 조회를 시도해보겠습니다. 문서가 있을 때와 없을 때 두 가지 경우 모두 핸들링 가능합니다.
결과 확인
소스에서도 보시면 아시다시피 저는 결과를 콘솔에 로그로 출력하였습니다.
5. 문서 삭제
DeleteRequest request = new DeleteRequest("testindex","Kf8NFH0BgwgVRf4nZwZL");
client.delete(request, RequestOptions.DEFAULT);
방금 조회한 _id값을 가진 문서를 삭제합니다.
결과 확인
kibana를 통해 결과를 확인해봅니다.
등록해 놓은 2개의 문서 중 Kf8NFH0BgwgVRf4nZwZL 라는 아이디를 가진 문서가 정상적으로 삭제되었습니다.
6. 문서 수정
UpdateRequest request = new UpdateRequest("testindex","zv8NFH0BgwgVRf4n8gY6");
Map<String,Object> updatedDoc = new HashMap<>();
updatedDoc.put("message", "업데이트된 문서입니다.");
request.doc(updatedDoc);
client.update(request, RequestOptions.DEFAULT);
남아있는 _id의 값이 zv8NFH0BgwgVRf4n8gY6 인 문서의 message를 수정합니다.
결과 확인
정상적으로 수정되었습니다.