티스토리 뷰

저 같은 경우 Elasitc Search를 사용할 때 직접 API 문서 보고 자바 코드로 작성합니다. API 문서가 영어이긴 하지만 상당히 자세히 나와있습니다.

 

아래 링크는 Elasitc Search 공식 API 및 사용법 문서입니다.

 

Java High Level REST Client | Java REST Client [master] | Elastic

The Java High Level REST Client works on top of the Java Low Level REST client. Its main goal is to expose API specific methods, that accept request objects as an argument and return response objects, so that request marshalling and response un-marshalling

www.elastic.co

 

주의 할만한 점은 최소 jdk1.8이상이여야 한다는 점입니다. 그리고 6.x버전들은 호환이 제대로 안될 수도 있다고 합니다.

 

제 서버 환경은 아래와 같습니다.

  • CentOS7
  • JDK1.8
  • ElasticSearch 7.13.4
  • maven 3.x

 

[STEP1] maven pom.xml에서 Elastic Search(이하 ES) dependency을 작성해줍니다.

<!-- elasticsearch -->
<dependency>
	<groupId>org.elasticsearch.client</groupId>
	<artifactId>elasticsearch-rest-high-level-client</artifactId>
	<version>7.13.4</version>
</dependency>

The High Level Java REST Client depends on the following artifacts and their transitive dependencies:

  • org.elasticsearch.client:elasticsearch-rest-client
  • org.elasticsearch:elasticsearch

[STEP2] ES와 연동하기

RestHighLevelClient client = new RestHighLevelClient(
        RestClient.builder(
                new HttpHost("localhost", 9200, "http"));

위에 코드를 작성함으로써 ES 서버와 연결할 수 있습니다. ES는 기본 포트가 9200입니다.

 

client.close();

그리고 항상 동적해제를 해주는 것처럼 client를 닫아주어야 합니다.

 

* 참고 : 만약 사용자 인증을 해야한다면 아래 글을 참고해주세요.

 

[Elastic Search+Java] 사용자 인증 구현하기 Basic Authentication

저 같은 경우 Elasitc Search를 사용할 때 직접 API 문서 보고 자바 코드로 작성합니다. 아래 링크는 Elasitc Search 공식 API Basic Authentication 입니다. Basic authentication | Java REST Client [7.14] |..

kingofbackend.tistory.com


[FINAL STEP] INDEX 생성하기

ES에서 INDEX는 기존 RDB와는 개념이 다릅니다. ES에서 INDEX는 DB와 같다고 보시면 됩니다.

  • INDEX = DB(SCHEMA)
  • TYPE = TABLE ( 7.x 이상부터는 TPYE을 사용하지 않습니다. 공식문서 참고)
  • DOCUMENTs = ROWS

역시 공식 문서에 상당히 자세히 나와있습니다. 여러가지 방법이 있는데 저같은 경우 아래와 같이 INDEX를 생성합니다.

 

GetIndexRequest indexRequest = new GetIndexRequest("st_pdt");
BulkRequest bulkRequest = new BulkRequest(); 

int pdt_id=0;

for(Pdt pdt : pdtList) {
  builder.startObject();
  {	
      builder.field("s_id", pdt.getShopid());
      builder.field("s_name", pdt.getS_name());
  }
  builder.endObject();
  
  bulkRequest.add(new IndexRequest("st_pdt").id(String.valueOf(pdt_id)).source(builder));
  pdt_id++;
}

 

Single document APIs인 Index API와 Multi document APIs인 Bulk API가 있는데 이름 그대로 하나씩 데이터를 INSERT 할거냐 여러개를 할거냐의 차이입니다. 대량 데이터를 INSERT 하려고 저는 Bulk API를 사용하였습니다.

 

GetIndexRequest를 이용하여 st_pdt INDEX를 생성하였고, BulkRequest를 이용하여 대량의 데이터를 st_pdt INDEX에 INSERT하였습니다.

 

$ curl -X GET "localhost:9200/st_pdt" 명령어를 통해 제대로 INDEX가 만들어졌는지 확인합니다.

 

이상 자바와 ES를 연동해봤습니다. 다음 글에서는 방금 생성한 st_pdt에서 데이터를 GET하는 방법에 대해 알아보겠습니다.

댓글
댓글쓰기 폼
공지사항
Total
248,427
Today
802
Yesterday
1,065
링크
«   2022/10   »
            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          
글 보관함