Wednesday

18-06-2025 Vol 19

Using elastic search to optimize text search šŸ”

Mengoptimalkan Pencarian Teks dengan Elasticsearch: Panduan Lengkap

Pencarian teks yang efisien dan relevan adalah landasan dari banyak aplikasi modern. Dari situs e-commerce yang besar hingga blog pribadi kecil, kemampuan untuk menemukan informasi dengan cepat dan akurat adalah penting. Elasticsearch, mesin pencari dan analisis berbasis JSON, menawarkan solusi canggih untuk mengoptimalkan pencarian teks. Artikel ini akan membahas secara mendalam tentang bagaimana menggunakan Elasticsearch untuk meningkatkan kemampuan pencarian aplikasi Anda.

Daftar Isi

  1. Apa Itu Elasticsearch?
  2. Mengapa Elasticsearch untuk Pencarian Teks?
  3. Konsep Dasar Elasticsearch
    1. Indeks
    2. Dokumen
    3. Field
    4. Mapping
    5. Analisis
  4. Pengaturan Elasticsearch
    1. Instalasi
    2. Konfigurasi
  5. Membuat Indeks dan Mapping
    1. Menentukan Mapping yang Tepat
    2. Tipe Data Field
    3. Contoh Mapping
  6. Mengindeks Data ke Elasticsearch
    1. Bulk Indexing
  7. Pencarian dengan Elasticsearch
    1. Jenis Query yang Tersedia
    2. Contoh Query
  8. Analisis Teks di Elasticsearch
    1. Analyzer
    2. Tokenizer
    3. Token Filter
    4. Character Filter
    5. Membuat Analyzer Kustom
  9. Meningkatkan Relevansi Pencarian
    1. Memahami Scoring
    2. Boosting
    3. Fungsi Skor
  10. Optimasi Kinerja Elasticsearch
    1. Pertimbangan Hardware
    2. Sharding dan Replikasi
    3. Caching
    4. Pemantauan
  11. Studi Kasus
    1. E-commerce
    2. Blog
    3. Aplikasi Perusahaan
  12. Integrasi dengan Bahasa Pemrograman
    1. Python
    2. Java
    3. JavaScript
  13. Kesimpulan
  14. Sumber Daya Tambahan

Apa Itu Elasticsearch?

Elasticsearch adalah mesin pencari dan analisis terdistribusi, RESTful, yang mampu memecahkan sejumlah kasus penggunaan yang berkembang. Sebagai inti dari Elastic Stack, ia secara terpusat menyimpan data Anda sehingga Anda dapat menemukan yang tak terduga dan menemukan yang tak terduga. Elasticsearch menyediakan kemampuan pencarian mendekati real-time dan analisis untuk berbagai jenis data terstruktur dan tidak terstruktur.

Mengapa Elasticsearch untuk Pencarian Teks?

  • Kecepatan: Elasticsearch dirancang untuk performa tinggi, memberikan hasil pencarian dengan latensi rendah.
  • Skalabilitas: Dapat diskalakan secara horizontal untuk menangani volume data yang besar dan lalu lintas pencarian yang tinggi.
  • Relevansi: Algoritma pencarian yang canggih dan opsi penyesuaian memungkinkan Anda untuk meningkatkan relevansi hasil pencarian.
  • Fleksibilitas: Mendukung berbagai jenis data dan menawarkan opsi konfigurasi yang luas.
  • Komunitas yang Besar: Komunitas pengguna dan pengembang yang besar dan aktif menyediakan dukungan dan sumber daya yang melimpah.

Konsep Dasar Elasticsearch

Indeks

Indeks di Elasticsearch mirip dengan database di database relasional. Ini adalah koleksi dokumen yang memiliki karakteristik serupa.

Dokumen

Dokumen adalah unit dasar informasi yang dapat diindeks di Elasticsearch. Ini direpresentasikan dalam JSON (JavaScript Object Notation). Mirip dengan baris dalam tabel database relasional.

Field

Field adalah kunci dalam dokumen JSON. Setiap field memiliki tipe data tertentu (misalnya, teks, angka, tanggal).

Mapping

Mapping adalah skema yang mendefinisikan bagaimana dokumen dan field diindeks dan disimpan. Ini menentukan tipe data untuk setiap field dan bagaimana teks harus dianalisis.

Analisis

Analisis adalah proses mengonversi teks menjadi token untuk diindeks. Ini melibatkan tokenizer (memecah teks menjadi token), filter token (memodifikasi token), dan filter karakter (memproses teks sebelum tokenisasi).

Pengaturan Elasticsearch

Instalasi

Elasticsearch dapat diunduh dan diinstal dari situs web Elastic. Ikuti petunjuk instalasi untuk sistem operasi Anda (Windows, macOS, Linux).

Contoh untuk Linux (Debian/Ubuntu):

  1. Unduh paket DEB: wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.10.2-amd64.deb (Sesuaikan versi)
  2. Instal paket: sudo dpkg -i elasticsearch-8.10.2-amd64.deb
  3. Atur Elasticsearch untuk mulai saat boot: sudo systemctl enable elasticsearch.service
  4. Mulai Elasticsearch: sudo systemctl start elasticsearch.service

Konfigurasi

File konfigurasi Elasticsearch terletak di direktori config. File utama adalah elasticsearch.yml. Anda dapat mengonfigurasi berbagai pengaturan, seperti nama cluster, nama node, dan lokasi data.

Contoh konfigurasi dasar:

  
   cluster.name: my-application
   node.name: node-1
   network.host: 0.0.0.0
   http.port: 9200
  
  

Membuat Indeks dan Mapping

Menentukan Mapping yang Tepat

Mapping yang tepat sangat penting untuk performa pencarian yang optimal. Anda harus menentukan tipe data yang sesuai untuk setiap field dan cara teks harus dianalisis.

Tipe Data Field

  • text: Untuk field yang berisi teks yang perlu dianalisis.
  • keyword: Untuk field yang berisi nilai string yang harus dicari secara tepat.
  • date: Untuk field yang berisi tanggal.
  • integer, long, float, double: Untuk field yang berisi angka.
  • boolean: Untuk field yang berisi nilai boolean.
  • geo_point: Untuk field yang berisi koordinat geografis.

Contoh Mapping

Contoh mapping untuk indeks “products”:

  
   PUT /products
   {
    "mappings": {
     "properties": {
      "name": {
       "type": "text",
       "analyzer": "standard"
      },
      "description": {
       "type": "text",
       "analyzer": "standard"
      },
      "price": {
       "type": "double"
      },
      "category": {
       "type": "keyword"
      },
      "created_at": {
       "type": "date",
       "format": "yyyy-MM-dd HH:mm:ss"
      }
     }
    }
   }
  
  

Mengindeks Data ke Elasticsearch

Anda dapat mengindeks data ke Elasticsearch menggunakan API REST. Anda dapat mengirim dokumen JSON ke indeks tertentu.

Contoh mengindeks dokumen:

  
   POST /products/_doc/1
   {
    "name": "Laptop ASUS ROG",
    "description": "Laptop gaming dengan performa tinggi",
    "price": 1500.00,
    "category": "Laptop",
    "created_at": "2023-10-27 10:00:00"
   }
  
  

Bulk Indexing

Bulk indexing adalah cara yang lebih efisien untuk mengindeks sejumlah besar data. Anda dapat mengirim beberapa operasi indeks dalam satu permintaan.

Contoh bulk indexing:

  
   POST /_bulk
   {"index":{"_index":"products","_id":"2"}}
   {"name": "Smartphone Samsung Galaxy", "description": "Smartphone dengan kamera terbaik", "price": 1200.00, "category": "Smartphone", "created_at": "2023-10-27 11:00:00"}
   {"index":{"_index":"products","_id":"3"}}
   {"name": "Tablet Apple iPad", "description": "Tablet dengan layar retina", "price": 800.00, "category": "Tablet", "created_at": "2023-10-27 12:00:00"}
  
  

Pencarian dengan Elasticsearch

Jenis Query yang Tersedia

Match Query

match query digunakan untuk melakukan pencarian teks lengkap. Ini menganalisis query dan mencari dokumen yang cocok.

Term Query

term query digunakan untuk mencari nilai yang tepat dalam field. Ini tidak menganalisis query.

Range Query

range query digunakan untuk mencari nilai dalam rentang tertentu.

Bool Query

bool query digunakan untuk menggabungkan beberapa query menggunakan operator boolean (must, should, must_not, filter).

Fuzzy Query

fuzzy query digunakan untuk mencari teks yang mirip dengan query, dengan mempertimbangkan kesalahan ketik dan variasi.

Prefix Query

prefix query digunakan untuk mencari teks yang dimulai dengan awalan tertentu.

Wildcard Query

wildcard query digunakan untuk mencari teks yang cocok dengan pola wildcard (misalnya, * untuk mencocokkan nol atau lebih karakter, ? untuk mencocokkan satu karakter).

Contoh Query

Contoh pencarian menggunakan match query untuk mencari produk dengan nama “laptop”:

  
   GET /products/_search
   {
    "query": {
     "match": {
      "name": "laptop"
     }
    }
   }
  
  

Contoh pencarian menggunakan bool query untuk mencari produk dengan kategori “Laptop” dan harga di atas 1000:

  
   GET /products/_search
   {
    "query": {
     "bool": {
      "must": [
       {
        "term": {
         "category": "Laptop"
        }
       },
       {
        "range": {
         "price": {
          "gt": 1000
         }
        }
       }
      ]
     }
    }
   }
  
  

Analisis Teks di Elasticsearch

Analyzer

Analyzer bertanggung jawab untuk memproses teks menjadi token untuk diindeks. Ini terdiri dari tokenizer, filter token, dan filter karakter.

Tokenizer

Tokenizer memecah teks menjadi token berdasarkan aturan tertentu (misalnya, spasi, tanda baca).

Token Filter

Token filter memodifikasi token yang dihasilkan oleh tokenizer. Contoh filter token termasuk lowercase filter (mengubah semua token menjadi huruf kecil), stop filter (menghapus kata-kata umum seperti “the”, “a”, “is”), dan stemmer filter (mengurangi token ke bentuk dasarnya).

Character Filter

Character filter memproses teks sebelum tokenisasi. Contoh filter karakter termasuk HTML strip character filter (menghapus tag HTML) dan mapping character filter (mengganti karakter tertentu dengan karakter lain).

Membuat Analyzer Kustom

Anda dapat membuat analyzer kustom dengan menggabungkan tokenizer, filter token, dan filter karakter yang berbeda. Ini memungkinkan Anda untuk menyesuaikan proses analisis teks untuk memenuhi kebutuhan spesifik Anda.

Contoh membuat analyzer kustom:

  
   PUT /_analyze
   {
    "analyzer": {
     "my_analyzer": {
      "type": "custom",
      "tokenizer": "standard",
      "filter": [
       "lowercase",
       "stop",
       "porter_stem"
      ]
     }
    },
    "text": "The quick brown foxes jumped over the lazy dog."
   }
  
  

Meningkatkan Relevansi Pencarian

Memahami Scoring

Elasticsearch menggunakan algoritma scoring untuk menentukan relevansi setiap dokumen dengan query pencarian. Skor yang lebih tinggi menunjukkan relevansi yang lebih tinggi.

Boosting

Boosting memungkinkan Anda untuk meningkatkan atau menurunkan skor dokumen berdasarkan field tertentu atau kriteria lain. Ini dapat digunakan untuk memprioritaskan dokumen yang lebih penting.

Contoh boosting field “name”:

  
   GET /products/_search
   {
    "query": {
     "match": {
      "name": {
       "query": "laptop",
       "boost": 2
      }
     }
    }
   }
  
  

Fungsi Skor

Fungsi skor memungkinkan Anda untuk menyesuaikan algoritma scoring menggunakan fungsi matematika yang kompleks. Ini memberikan fleksibilitas yang lebih besar dalam menentukan relevansi pencarian.

Optimasi Kinerja Elasticsearch

Pertimbangan Hardware

Kinerja Elasticsearch sangat dipengaruhi oleh hardware. Pertimbangkan hal berikut:

  • CPU: Prosesor yang cepat dengan banyak core.
  • RAM: Cukup RAM untuk menampung indeks di memori.
  • Storage: SSD untuk performa I/O yang cepat.

Sharding dan Replikasi

Sharding membagi indeks menjadi beberapa bagian yang lebih kecil yang dapat disimpan di beberapa node. Replikasi membuat salinan shard untuk toleransi kesalahan dan meningkatkan ketersediaan.

Caching

Elasticsearch menggunakan caching untuk menyimpan hasil pencarian yang sering diakses. Ini dapat meningkatkan kinerja pencarian secara signifikan.

Pemantauan

Memantau kinerja Elasticsearch sangat penting untuk mengidentifikasi dan mengatasi masalah. Gunakan alat pemantauan seperti Kibana atau Prometheus untuk melacak metrik seperti penggunaan CPU, penggunaan memori, dan latensi pencarian.

Studi Kasus

E-commerce

Elasticsearch dapat digunakan untuk mengoptimalkan pencarian produk, menyediakan rekomendasi produk, dan menganalisis perilaku pelanggan.

Blog

Elasticsearch dapat digunakan untuk mengoptimalkan pencarian artikel, menyediakan tag terkait, dan meningkatkan pengalaman pengguna.

Aplikasi Perusahaan

Elasticsearch dapat digunakan untuk mengindeks dan mencari data perusahaan, menyediakan log analytics, dan memantau kinerja sistem.

Integrasi dengan Bahasa Pemrograman

Python

Gunakan library elasticsearch-py untuk berinteraksi dengan Elasticsearch dari Python.

  
   from elasticsearch import Elasticsearch

   es = Elasticsearch([{'host': 'localhost', 'port': 9200}])

   # Contoh pencarian
   response = es.search(index='products', query={'match': {'name': 'laptop'}})
   print(response)
  
  

Java

Gunakan Elasticsearch Java High Level REST Client untuk berinteraksi dengan Elasticsearch dari Java.

  
   import org.elasticsearch.client.RestHighLevelClient;
   import org.elasticsearch.client.RestClient;
   import org.apache.http.HttpHost;
   import org.elasticsearch.action.search.SearchRequest;
   import org.elasticsearch.action.search.SearchResponse;
   import org.elasticsearch.index.query.QueryBuilders;
   import org.elasticsearch.search.builder.SearchSourceBuilder;

   public class ElasticsearchExample {
    public static void main(String[] args) throws Exception {
     RestHighLevelClient client = new RestHighLevelClient(
      RestClient.builder(
       new HttpHost("localhost", 9200, "http")));

     SearchRequest searchRequest = new SearchRequest("products");
     SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
     searchSourceBuilder.query(QueryBuilders.matchQuery("name", "laptop"));
     searchRequest.source(searchSourceBuilder);

     SearchResponse searchResponse = client.search(searchRequest, org.elasticsearch.client.RequestOptions.DEFAULT);

     System.out.println(searchResponse);
     client.close();
    }
   }
  
  

JavaScript

Gunakan Elasticsearch JavaScript Client untuk berinteraksi dengan Elasticsearch dari JavaScript (Node.js atau browser).

  
   const { Client } = require('@elastic/elasticsearch')
   const client = new Client({ node: 'http://localhost:9200' })

   async function run () {
    const result = await client.search({
     index: 'products',
     query: {
      match: { name: 'laptop' }
     }
    })

    console.log(result)
   }

   run().catch(console.log)
  
  

Kesimpulan

Elasticsearch adalah alat yang ampuh untuk mengoptimalkan pencarian teks. Dengan memahami konsep dasar, konfigurasi, dan query yang tersedia, Anda dapat meningkatkan kemampuan pencarian aplikasi Anda dan memberikan pengalaman pengguna yang lebih baik. Selalu pertimbangkan analisis teks, relevansi pencarian, dan optimasi kinerja untuk hasil yang optimal.

Sumber Daya Tambahan

“`

omcoding

Leave a Reply

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