Nyobain Elasticsearch dengan PHP

Elasticsearch mungkin bukan hal yang baru, tapi bagi saya ini baru. Udah lama denger tapi belum sempet pakai karena sepertinya belum ada kesempatan untuk menggunakannya.

Biasa request dari klien atau atasan, “Kok ini lemot ya..kok ini lama ya keluarnya”. Nah dari situ baru kita belajar “Gemana nih biar cepet..”.

Kasus sederhana adalah proses pencarian produk. E-commerce yang besar seperti shopee, BL, Tokped, Blibli pasti punya ribuan atau mungkin ratusan ribu atau lebih ya.. Ibarat kita nyari satu halaman dalam buku, semakin banyak halaman buku, semakin lama kita mencari keyword dalam tiap halaman yang kita inginkan.

Kalau pake database biasa, rada ngap-ngapan mungkin si database, perlu di tune-up lagi, dinaikin fisik servernya atau mungkin dibuat menyamping (scaling vertical) dengan berbagai cara dilakukan.

Salah satu form pencarian suggestion dari blibli. Ada keyword2 yang biasa dicari oleh customer lain lalu ada produk populer. Keren ya..

Dan ini saya pernah buat dengan MySQL alurnya adalah ketika customer mencari produk, saya simpan di table mysql, lalu ketika ada customer lain mencari kembali, saya munculkan data-data yang pernah orang cari. Mirip ya..

Tapi bayangin kalo ada 1000 customer dalam 1 hari. Lalu dalam 1 bulan, lalu dalam 1 tahun, kebayang yaa..itu table gendut banget pasti..

Untuk itu, biasanya data-data pencarian ini yang tidak masuk transaksi akan disimpan di data non transaksi engine seperti dengan mongodb, elasticsearch atau dengan tool lain bukan disimpan di RDBMS.

Beres cerita dikit soal penggunaan elasticsearch mari kita masuk ke proses selanjutnya.

Install Elasticsearch

Sebelum masuk cara panggil elasticsearch dengan PHP, ya perlu install dan isi elasticsearch dulu di vps atau local laptop kita. Ada banyak cara install elasticsearch di google. Monggo bisa coba di link berikut:

  1. Install di Ubuntu biasanya untuk server. https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-elasticsearch-on-ubuntu-16-04
  2. Install di Mac. Ini cara install paling mudah pake homebrew. Biasa buat testing-testing sebelum masuk ke server. https://chartio.com/resources/tutorials/how-to-install-elasticsearch-on-mac-os-x/
  3. Install di Windows. Elasticsearch bisa digunakan di windows. Belum pernah coba tapi mungkin bisa. https://www.elastic.co/guide/en/elasticsearch/reference/current/windows.html

Baik, setelah berhasil di install. Mari kita belanjar konsep-konsep sederhana dulu pada elasticsearch.

Konsep Dasar Elasticsearch.

Sebelum masuk ke konsep dasar, mungkin ada yg nanya “Kenapa mesti elasticsearch? kenapa ga pakai solr?, kenapa ga pakai redis?” dan lainnya. Jujur saya ga bisa jawab tapi saya sempet nyoba install solr dan coba pakai rada repot. Enaknya elasticsearch ini ada API Rest buat coba-coba. Lalu data yang dikirim dan diterima dalam bentuk JSON πŸ™‚

Konsep dasar Elasticsearch ini saya kumpulkan ada di beberapa artikel berikut:

  • Codementor. Belajar dari konsep sampai cara install dan penggunaan.
  • Joelabrahamsson. Beberapa tool ada yg ga bisa dipakai. Saya ganti dengan postman untuk testing.
  • Dokumentasi Resmi. Belajar dari doc resmi lebih baik

Yang mesti diingat dalam konsep dasar elasticseach ini adalah naming-nya seperti apa itu index, apa itu document, apa itu type dan korelasinya di RDBMS.

Konekin ke PHP
Setelah diinstall dan coba diisi datanya. Elasticsearch bisa kita coba panggil dengan PHP. Sebenernya bisa dibaca-baca disini https://www.elastic.co/guide/en/elasticsearch/client/php-api/current/_quickstart.html. Lalu Elasticsearch juga sudah membuatkan client untuk PHP di github ini: https://github.com/elastic/elasticsearch-php. Jadi tinggal colok composer, setting dikit sesuai dengan local dimana elasticsearch ini di install. Dan tadaa…bisa kok..belum muncul ya..

Saya coba buat satu folder dengan nama esphp, lalu saya buat satu file dengan nama composer.json dan isi file tersebut untuk menambahkan si elasticsearch php client.

{
        "require": {
            "elasticsearch/elasticsearch": "~6.0"
        }
    }

Pada kode tersebut dan saat tulisan ini dibuat, ES (elasticsearch) sedang aktif di versi 6.1. Jadi saya tulis require ke versi 6.

Jika selesai, ketik di terminal “composer install”, untuk menginstall depedency elasticsearch tersebut. Pastikan dulu ya composer sudah terinstall di laptop/komputer kita.

Setelah berhasil, nanti ada folder vendor yang berisi folder-folder depedency dari elasticsearch. Abaikan saja lalu kita buat index.php untuk memanggil elasticsearch di laptop kita dengan PHP. Isi kode index.php:

<?php

require 'vendor/autoload.php';

$hosts = [
    'localhost'
];

$client = Elasticsearch\ClientBuilder::create()
            ->setHosts($hosts)
            ->setRetries(2)
            ->build();

$params = [
    'index'  => 'movies',
    'type'   => 'movie',
    'id'     => 2,
    'client' => [ 'ignore' => 404 ]
];

echo json_encode( $client->get($params) );

Di kodingan tersebut saya seperti mengkonek-an PHP dengan Mysql. Ambil data client PHP dulu, setting host elasticsearch, buat inisialiasi object PHP dan panggil/query apa yang mau kita panggil di $params. Lalu munculkan dengan json (karena defaultnya adalah sebuah array jika di PHP) hasil query kita dengan json_encode.

Jika dilihat ada index, type, id itu adalah ambil data id 2, dari table/type movie di database/index movies elasticsearch.

Sederhana yaa..

Data movies itu saya ambil dari data link joelabrahamsson.

Mudah-mudahan menarik untuk dipelajari πŸ™‚

Leave a Reply

Your email address will not be published. Required fields are marked *

%d bloggers like this: