Pendahuluan awal mengenai Elastic Search bisa dilihat di Apa itu elastic search ?

Koneksi Elastic Search Client menggunakan TransportClient dan JEST ?

Koneksi Elastic Search Client menggunakan REST Client

Ok, sebelumnya kita sudah melihat bahwa ada 3 cara awal untuk inisiasi Elastic Search Client yaitu :

  • menggunakan TransportClient library dari Elastic Searchnya langsung. (deprecated)
  • menggunakan JEST library.
  • menggunakan REST Client (deprecated) –> terdiri dari Low Level RestClient (LLRC) dan High Level RestClient (HLRC).

Kita akan lihat 2 cara lain, yaitu :

  • menggunakan API Client –> merupakan ElasticSearch Java API client, cara terbaru dalam koneksi ke Elastic Search Server.
  • menggunakan HTTP Rest Client umum seperti Apache HTTP Client, RestTemplate, Feign, dll.

Referensi : Java API Client



4. API Client


ElasticSearch Java API Client ini adalah cara terbaru melakukan koneksi ke Elastic Search Server.

Cara ini merupakan cara yang direkomendasikan dari Elastic Searchnya.

Apa bedanya dengan REST API ?

Bedanya adalah di sisi kemudahan code dari sisi development.

API Client ini berupaya untuk menggantikan HLRC (High Level Rest Client) terkait dengan object request responsenya.

Dengan Java API Client ini, maka request response akan otomatis termapping dengan POJO java yang ada.

Object/Document akan lebih tight-coupling di Java API Client ini dibandingkan menggunakan HLRC.

Dengan menggunakan Java API Client ini pula, membuat objek Elastic Search Client lebih intuitif memakai fluent interface builder.

Secara internalnya, Java API Client ini tetap menggunakan Low Level Rest Client (LLRC) dibawahnya untuk handling segala sesuatu berkaitan dengan low level layer atau Transport layer, seperti HTTP Connection, Pooling, Node Discovery, dll.

Persyaratan menggunakan ElasticSearch Java API Client ini :

  • minimal menggunakan Java 8.
  • menggunakan library untuk JSON mappernya, bisa dengan menggunakan Jackson atau JSON-B.

Caranya juga mudah, misalnya dengan menggunakan maven :

<project>

  <dependencies>
    <dependency>
      <groupId>co.elastic.clients</groupId>
      <artifactId>elasticsearch-java</artifactId>
      <version>7.16.3</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>2.12.3</version>
    </dependency>
  </dependencies>

</project>

Ketika melakukan inisiasi koneksi ke Server, maka kita harus membuat 3 objek berikut :

  • API Client.
  • JSON Object Mapper.
  • Transport client implementation.

Misalnya di code :

// Create the low-level client
RestClient restClient = RestClient.builder(
    new HttpHost("localhost", 9200)).build();

// Create the transport with a Jackson mapper
ElasticsearchTransport transport = new RestClientTransport(
    restClient, new JacksonJsonpMapper());

// And create the API client
ElasticsearchClient client = new ElasticsearchClient(transport);

Referensi : Connect Java API Client


Bisa kita lihat kalau di waktu inisiasi koneksi diatas, Low Level Rest Client tetap digunakan sebagai objek yang mengelola koneksi, security, dll.

Akibatnya kita cuma sedikit mengubah code kita kalau sebelumnya kita melakukan koneksi dengan HLRC.

Contoh :

// Create the low-level client
RestClientBuilder httpClientBuilder = RestClient.builder(
    new HttpHost("localhost", 9200)
);

// Create the HLRC
RestHighLevelClient hlrc = new RestHighLevelClient(httpClientBuilder);

// Create the new Java Client with the same low level client
ElasticsearchTransport transport = new RestClientTransport(
    hlrc.getLowLevelClient(),
    new JacksonJsonpMapper()
);

ElasticsearchClient esClient = new ElasticsearchClient(transport);

// hlrc and esClient share the same httpClient

Sumber : Migrasi HLRC ke Java API Client