본문 바로가기

dev/스프링

Spring ElasticSearch 첨부파일 색인

스프링에서 ElasticSearch에 첨부파일 색인하는 방법입니다.

 

첨부파일 색인 메소드

 

위의 코드는 클라이언트로부터 받은 첨부파일을 색인하는 insertFile 메소드입니다.(112 ~ 128라인)

 

먼저 멀티파트 요청의 첨부파일을 saveFileToDisk 메소드를 통해 서버에 저장합니다.(130 ~ 147라인)

 

saveFileToDisk 메소드는 저장한 첨부파일 리스트를 리턴합니다.(146라인)

 

첨부파일 리스트 개수가 2개 이상이면 bulkFileElastic 메소드를 호출하고

 

1개면 saveFileElastic 메소드를 호출합니다.(123 ~ 127라인)

 

bulkFileElastic & saveFileElastic 메소드

 

bulkFileElastic 메소드는 2개 이상의 첨부파일을 한 번에 색인하는 메소드입니다.(149 ~ 170라인)

 

이전에 제가 작성한 ElasticSearch bulk API는 데이터를 json 파일에 작성해서 색인한 것을 한번 참고하시기 바랍니다.

 

https://tiqndjd12.tistory.com/223

 

Elastic Search bulk API

엘라스틱서치 bulk API를 사용하면 여러 건 이상의 데이터를 한 번에 추가할 수 있습니다. "test_index"이름의 인덱스를 등록합니다. 인덱스에 저장할 json 파일을 작성합니다. json파일에 대해 간략히

tiqndjd12.tistory.com

 

이번에는 json 데이터를 HTTP BODY에 추가하여 색인했습니다.(153 ~ 161라인)

 

색인할 첨부파일이 2개 이상이면 bulk API를 사용하여 한번에 처리하는 것이 더 효율적입니다.

 

첨부파일을 하나씩 색인하게 되면 잦은 오버헤드가 발생하기 때문입니다.

 

saveFileElastic 메소드는 1개의 첨부파일을 색인하는 메소드입니다.(172 ~ 191라인)

 

bulkFileElastic와 saveFileElastic 메소드에서 공통적으로 호출하는 convertFile 메소드가 있습니다.(160, 175라인)

 

converFile 메소드

 

convertFile 메소드는 첨부파일의 내용을 Base64로 인코딩하여 리턴하고 있습니다.

 

첨부파일의 내용이 특수문자가 포함된 경우 그대로 색인하면 인코딩 문제가 발생할 수 있기 때문에 Base64로 인코딩해야 합니다.

 

ElastiSearchUtil post 메소드

 

REST API의 POST 메소드 방식을 통해 첨부파일의 내용을 ElasticSearch에 색인합니다.

 

bulkElasticSearch 메소드

 

bulkFileElastic 메소드를 디버깅해서 bulk API에 전달할 데이터를 조회하면

 

위와 같이 json 데이터가 생성된 것을 확인할 수 있습니다.

 

kibana 조회 화면

 

bulk API로 색인한 첨부파일이 정상적으로 실행된 것을 확인할 수 있습니다.

 

saveFileElastic 메소드

 

1건의 첨부파일을 색인하는 saveFileElastic 메소드를 디버깅해서 json데이터를 조회화면

 

위와 같이 json 데이터가 생성된 것을 확인할 수 있습니다.

 

kibana 조회 화면

 

1건의 첨부파일이 정상적으로 색인된 것을 확인할 수 있습니다.

 

spring-data-elasticsearch를 사용하여 색인할 수 있지만 REST API를 통해 ElasticSearch에 색인할 수 있습니다.

'dev > 스프링' 카테고리의 다른 글

Spring ElasticSearch Snapshot Backup Restore  (0) 2024.05.21
Spring ElasticSearch 첨부파일 조회  (0) 2024.05.12
Spring ClassPathResource  (0) 2024.04.21
Spring Controller ResponseEntity  (0) 2024.04.20
Spring RestControllerAdvice  (0) 2024.03.29