Excel to Elasticsearch(2)

P_Sangsu·2021년 7월 12일
0

지난 시간엔 Excel Data를 Java로 읽어 오기까지 성공했다.
Java에 담겨져 있는 Excel Data의 구조를 살펴보면 다음과 같다.


{key1=value1_1, key2=value1_2, key3=value1_3,...} => Map<key, value>
{key1=value2_1, key2=value2_2, key3=value2_3,...}
{key1=value3_1, key2=value3_2, key3=value3_3,...}
...
=> ArrayList = [Map1, Map2, Map3...]


이번 포스팅에선 Java로 읽어온 Excel Data를 Elasticsearch에 색인하는 과정을 담아보겠다.

Elasticsearch와 Java를 연동하는 작업은 elastic 공식 홈페이지에 자세하게 나와있다. 일반 블로그들에 나와있는 코드들보다 더욱 설명이 잘 돼있어 많은 도움이 됐다.

https://www.elastic.co/guide/en/elasticsearch/client/java-rest/6.8/java-rest-high-getting-started-initialization.html

Java의 데이터를 Elasticsearch로 색인하는 과정은 다음과 같다.

Java와 Elasticsearch 연동 -> Index 생성 -> Field 생성 -> Document 색인 (Bulk API) -> client 종료

과정에 맞게 우선 Java와 Elasticsearch 연동하는 방법을 알아보도록 하겠다.

Class의 도입부에 아래 코드를 작성한다.

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

본인은 RestHighLevelClient 방식을 사용했다.

HttpHost("server ip address", "port", "http")

본인의 설정에 맞게 이 부분을 수정해주면 된다.

client.close();	

Java를 실행하면 client를 선언해줌과 동시에 연동이 된다.

주의할 점은 Class의 마지막에 client를 닫아주지 않는다면 강제로 종료하지 않는 한 빌드가 계속해서 실행중인 상태가 될 것이다.

연동은 했으니 Index를 생성해 보겠다.

client 선언부와 close 사이에 api를 작성해주면 된다.

CreateIndexRequest createIndexRequest = new CreateIndexRequest(index);

createIndexRequest.settings(Settings.builder().put("index.number_of_shards", 2).put("index.number_of_replicas", 1));

Index 생성과 함께 setting도 해주는 모습이다.
shard의 개수는 2개, replica의 개수는 1개를 생성해줬다.

Index를 생성해 주었으니 Field를 생성해보겠다.

XContentBuilder builder = XContentFactory.jsonBuilder();
builder.startObject();
{
    builder.field("user", "kimchy");
    builder.timeField("postDate", new Date());
    builder.field("message", "trying out Elasticsearch");
}
builder.endObject();
IndexRequest indexRequest = new IndexRequest("posts", "doc", "1")
        .source(builder);

필드를 생성하고

createIndexRequest.mapping("_doc", builder);

mapping을 시켜준다.

CreateIndexResponse createIndexResponse = client.indices().create(createIndexRequest, RequestOptions.DEFAULT);

위에 설정한 값들로 Index와 Field가 이 문장으로 생성이 된다.

Java의 데이터를 Elasticsearch로 색인하는 여러 방법 중 사용한 api는 Bulk API이다. 다음 포스팅에서 Bulk API를 다루도록 하겠다.

profile
Wannabe Sexy Developer

0개의 댓글