SpringbootからElasticSearchにデータ投入

軽く試したのでメモ
RestHighLevelClientを使ってElasticSearchにデータを投入します。
Springbootは2以上でないとエラーになりました。

環境

  • Java8
  • Springboot2.0.0
  • Gradle4.0

依存関係追加

build.gradleに追加します。

compile 'org.elasticsearch.client:elasticsearch-rest-high-level-client:6.2.3'

実装

HogeBean

投入用Bean作成。

@Data
public class HogeBean{
    public Integer id; // 1
    public String user; // zawa
    public String postDate; // 2018-04-02
    public String message; // テストやで
}

ElasticSearchService

投入用サービスの作成

@Service
public class ElasticSearchService {

    String INDEX = "hoge-index";
    String TYPE = "hoge-type";

    public void import(HogeBean bean) {

        // Bean→JSON文字列変換
        ObjectMapper mapper = new ObjectMapper();
        String json = null;
        try {
            json = mapper.writeValueAsString(bean);
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }

        // リクエスト作成。
        BulkRequest bulkRequest = new BulkRequest();
        IndexRequest request = new IndexRequest()
                .index(INDEX).type(TYPE).id(String.valueOf(bean.id))
                .source(json, XContentType.JSON);
        bulkRequest.add(request);

        // 実行
        try (RestHighLevelClient client = new RestHighLevelClient(
                RestClient.builder(
                        new HttpHost("127.0.0.1", 9200, "http")))) {
            client.bulk(bulkRequest);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

確認

上記実行後

コマンドから

$ curl 127.0.0.1:9200/hoge-index/hoge-type/_search?q=*
{"took":0,"timed_out":false,"_shards":{"total":5,"successful":5,"failed":0},"hits":{"total":1,"max_score":1.0,"hits":[{"_index":"hoge-index","_type":"hoge-type","_id":"1","_score":1.0,"_source":{"user":"zawa","postDate":"2018-04-02","message":"テストやで"}}]}}

Kibanaから

ちゃんと入ってますb

サーバサイドエンジニア。オムライスが好物

シェアする

  • このエントリーをはてなブックマークに追加

フォローする