← Semua picks

Stack Comparison Conditional

Elasticsearch vs Meilisearch vs Typesense

Tiga search engine saya jalankan paralel 22 bulan di SaaS B2B + BUMN Jakarta. Elasticsearch untuk security log forensic + analytics. Meilisearch / Typesense untuk product search end-user latency-critical. Verdict per workload.

8 Juli 2026 · 12 menit ·Use case: Search engine untuk product catalog + log forensic enterprise Indonesia
ElasticsearchOpenSearchMeilisearchTypesense

TL;DR

  • Elasticsearch / OpenSearch: log forensic + business analytics + query DSL kompleks. Cost tinggi, ops complex.
  • Meilisearch: product search end-user, relevance default bagus, footprint kecil. Saving cost vs ES untuk search workload.
  • Typesense: similar Meilisearch + cluster HA mature, multi-tenant first-class.
  • Verdict: Conditional — ES untuk analytical, Meilisearch / Typesense untuk end-user search. Jangan campur.

Konteks

Saya jalankan ketiga search engine paralel 22 bulan (Agustus 2024 - Mei 2026) di:

  • Fintech series-B Jakarta: Elasticsearch self-host 3-node cluster untuk security log forensic + audit query, Meilisearch single-node untuk in-app search (find customer, find transaction, find document)
  • BUMN energy Jakarta: Elasticsearch + Logstash + Kibana (ELK) stack untuk operational + security log, evaluasi Typesense untuk knowledge base search 4 bulan

Pengalaman ES sebelumnya: 7 tahun (sejak 5.x era). Meilisearch: 2 tahun. Typesense: 1 tahun.

Pricing (Juni 2026)

Elasticsearch self-host

  • Software gratis (Elastic License 2.0 — free for production, no SaaS-of-software clause)
  • 3-node cluster GKE Jakarta n2-standard-4 (4 vCPU, 16GB RAM, 1TB SSD per node):
    • Compute: 3 × Rp 1,6 juta = Rp 4,8 juta/bulan
    • Storage SSD 3TB: Rp 1,8 juta/bulan
    • Cross-zone replication: Rp 400 ribu/bulan
  • Plus Kibana 1 pod e2-medium: Rp 700 ribu/bulan
  • Plus Logstash 2 worker: Rp 1,2 juta/bulan
  • Total ES self-host: Rp 8,9 juta/bulan + ops 30-40 jam/bulan

Elastic Cloud managed

  • Standard tier setara: USD 850/bulan = Rp 13,6 juta
  • Gold: USD 1.500/bulan = Rp 24 juta
  • Enterprise: USD 3.000+/bulan

OpenSearch Service AWS

  • Setara t3.medium.search × 3: USD 750-1.300/bulan
  • Tidak ada region Jakarta — terdekat Singapore (latency 30-50ms)

Meilisearch self-host

  • Software gratis (MIT)
  • Single-node e2-medium (2 vCPU, 4GB RAM) + 200GB SSD: Rp 920 ribu/bulan
  • Untuk fintech saya: 1 cluster 3-node HA: Rp 2,8 juta/bulan
  • Meilisearch Cloud (managed): USD 35-499/bulan tergantung tier

Typesense self-host

  • Software gratis (GPL)
  • 3-node cluster e2-small: Rp 1,4 juta/bulan
  • Typesense Cloud: USD 36-500+/bulan

Algolia (managed, sebagai pembanding)

  • Build plan: free 10k record, 10k search/bulan
  • Grow plan: USD 0,5/1k search, USD 1/100 record
  • Untuk 5 juta search/bulan + 500k record: USD 2.500-4.000/bulan = Rp 40-64 juta/bulan

Total search stack

KomponenCost/bulan fintech
Elasticsearch self-host (log + audit)Rp 8,9 juta
Meilisearch self-host HA (in-app search)Rp 2,8 juta
TotalRp 11,7 juta/bulan

Bandingkan kalau full managed (Elastic Cloud + Algolia): Rp 70-90 juta/bulan equivalent. Self-host saves Rp 60+ juta/bulan dengan trade-off ops overhead 40-60 jam/bulan.

SLO + performance (22 bulan)

Elasticsearch

MetrikTargetRealisasi
Indexing latency p99< 500ms320ms
Search latency simple query p99< 200ms145ms
Search latency aggregation p99< 2 detik1,4 detik
Throughput indexing> 5k doc/s12k doc/s sustained
Throughput search> 200 query/s850 query/s peak
Cluster availability99,9%99,87%

Insiden ES 22 bulan: 4 P2 (memory pressure 2x, disk fill 1x, deploy regression 1x). 0 P0.

Meilisearch

MetrikTargetRealisasi
Search latency p99< 50ms22ms
Indexing latency p99 (per document)< 100ms65ms
Throughput search> 1k query/s4.500 query/s peak
Cluster availability99,9%99,95%

Meilisearch sangat snappy untuk end-user search. Default tuning sudah bagus, minimal effort untuk hit SLO.

Typesense (eval 4 bulan)

MetrikRealisasi
Search latency p9928ms
Indexing latency p9978ms
Throughput search3.800 query/s peak
Cluster HA failover8 detik (lebih cepat dari Meilisearch HA)

Typesense HA cluster more mature dibanding Meilisearch. Untuk multi-tenant scenario (per-customer index), Typesense API design lebih clean.

Capability comparison

CapabilityElasticsearchMeilisearchTypesense
Full-text searchya (powerful)ya (typo-tolerant default)ya (typo-tolerant)
Faceted searchyayaya
Geo searchya (geo_point, geo_shape)ya (basic)ya
Aggregation kompleksya (best)terbatasterbatas
Time-series optimizationya (ILM, data stream)tidaktidak
Percolation (reverse search)yatidaktidak
Vector / semantic searchya (dense_vector 8.x+)ya (8.x+)ya (1.x+)
Multi-language analyzerya (50+ language)ya (10+ language)ya
Bahasa Indonesia tokenizerya (custom analyzer)basicbasic
Realtime indexinghampir realtime (1 detik refresh)realtimerealtime
Cluster HAmaturematuringmature
Multi-tenantmanual (separate index)manualfirst-class API
Query DSLJSON, komplekssimplersimpler
Ekosistem (Kibana, Logstash)matureterbatasterbatas
Self-host operational complexitytinggirendahrendah
Memory footprint per node16-32GB typical1-4GB1-4GB

Search relevance comparison

Workload: search 380k customer record di SaaS B2B (nama, email, NPWP, alamat).

AspekElasticsearch defaultMeilisearch defaultTypesense default
Setup time2-3 hari (analyzer + mapping)30 menit45 menit
Typo tolerance defaultmanual (fuzzy query)otomatisotomatis
Bahasa Indonesia stemmanual (custom analyzer)basicbasic
Relevance default kualitasOK (need tuning)excellentexcellent
Tuning efforttinggirendahrendah

Untuk product search end-user dengan query bersifat fuzzy / typo-tolerant: Meilisearch + Typesense default-nya lebih bagus dari ES default. ES bisa mencapai relevance same atau better, tapi butuh tuning analyzer + scoring 1-2 minggu.

Trade-off arsitektural

Pilih Elasticsearch / OpenSearch kalau:

  • Log analytics / SIEM (security forensic, audit)
  • Aggregation kompleks (timeseries, bucket aggregation)
  • Volume document > 100M atau retention panjang
  • Integrasi ekosistem (Kibana visualization, Logstash pipeline, Filebeat shipper)
  • Vector search dengan dataset besar (8.x+ KNN)
  • Query DSL kompleks dibutuhkan

Pilih Meilisearch kalau:

  • End-user product search
  • Latency p99 < 50ms wajib
  • Dataset menengah (1M-50M document)
  • Relevance default bagus tanpa banyak tuning
  • Self-host operational simple

Pilih Typesense kalau:

  • Multi-tenant SaaS (per-customer index)
  • Cluster HA matang (lebih dari Meilisearch saat ini)
  • Similar Meilisearch fitness
  • Real-time indexing wajib

Pilih Algolia managed kalau:

  • E-commerce dengan revenue dependent search relevance
  • Butuh advanced feature (personalization, A/B test, Insights API, AI ranking)
  • Budget premium OK (Rp 40-100 juta/bulan acceptable)
  • SLA 99,99% kontraktual penting

HA + DR

Elasticsearch HA

  • 3-node cluster minimum (master quorum)
  • Replica shard = 2 (1 primary + 2 replica)
  • Cross-zone distribution (asia-southeast2-a, b, c)
  • RPO: 5 detik (refresh interval default 1 detik)
  • RTO: 30-60 detik untuk replica promotion saat primary fail
  • Snapshot to R2 daily, retention 30 hari hot + 7 tahun Glacier

Meilisearch HA

  • HA via cluster mode (di v1.x stable)
  • 3-node cluster: 1 leader + 2 follower
  • RPO: ~1 detik
  • RTO: ~10-15 detik failover

Typesense HA

  • 3-node Raft cluster
  • RPO: 0 (synchronous)
  • RTO: 5-10 detik
  • Lebih mature HA story dari Meilisearch saat ini

Pattern indexing

Elasticsearch indexing pipeline

Service log ──→ Filebeat ──→ Logstash (transform) ──→ ES bulk API

                                                          ├─ retention policy ILM (hot → warm → cold → delete)
                                                          ├─ index lifecycle 30 hari hot + 90 hari warm
                                                          └─ snapshot ke R2 weekly

Tuning produksi:

  • Bulk batch 1000-5000 doc / request
  • Refresh interval 5-10 detik untuk write-heavy index
  • Replica 1 untuk write-heavy, 2 untuk read-heavy

Meilisearch indexing pipeline

Domain database (Postgres) ──→ CDC trigger ──→ Meilisearch document API
                                                  (batch 100-1000 doc)

Saya pakai CDC dengan Debezium → Kafka → consumer push ke Meilisearch. Latency Postgres-to-search: 2-5 detik typical.

Typesense indexing pipeline

Similar Meilisearch. API multi-tenant first-class — 1 collection per customer untuk SaaS.

Common pitfall

  1. ES heap size salah. Default 1GB tidak cukup untuk production. Set 50% RAM up to 31GB (compressed oops boundary). 32GB+ = wasted memory.
  2. ES query tanpa pagination limit. Query return millions of doc = OOM. Setup search.max_buckets + max_result_window limit. Pakai search_after untuk deep pagination.
  3. Meilisearch index lock. Bulk update masuk semua = lock index. Batch update dengan size 1000-5000 + interval, jangan flood.
  4. Multi-tenant tanpa per-tenant rate limit. Customer enterprise heavy load = degrade tenant lain. Implement quota per-tenant + circuit breaker.
  5. Relevance tidak pernah di-tune untuk Bahasa Indonesia. Default analyzer ES = English. Untuk Bahasa Indonesia: custom analyzer dengan stop word + stemmer Sastrawi (Indonesian-specific). Effort 1-2 minggu, impact relevance signifikan.

Indonesia specific

Tokenizer Bahasa Indonesia

ES: pakai Sastrawi via custom analyzer + sebagai filter token. Setup:

{
  "settings": {
    "analysis": {
      "analyzer": {
        "indonesian_stemmer": {
          "tokenizer": "standard",
          "filter": ["lowercase", "indonesian_stem"]
        }
      },
      "filter": {
        "indonesian_stem": {
          "type": "stemmer",
          "name": "indonesian"
        }
      }
    }
  }
}

Plus stop word list Indonesia (yang, dan, atau, dll). Improve recall 25-35% untuk search Bahasa Indonesia.

Meilisearch: support stop word + synonyms manual. Tokenizer basic, tapi untuk SaaS B2B dengan nama customer + produk relatif simple, default cukup.

Data residency

Self-host ES + Meilisearch di GKE Jakarta = data tinggal di Indonesia. Untuk fintech regulated: wajib. Algolia / Elastic Cloud Singapore region: data keluar Indonesia, perlu disclosure untuk customer.

Hiring

ES engineer di Jakarta: pool moderate. CKS / Elastic Certified Engineer ada beberapa, kompensasi Rp 30-45 juta/bulan untuk senior. Meilisearch / Typesense engineer scarce — train dari ES engineer atau backend engineer (ramp-up 2-3 minggu).

Cost of ownership 36 bulan

Skenario: SaaS B2B + fintech series-B, log + search workload mixed.

ItemSelf-host ES + MeilisearchElastic Cloud + AlgoliaOpenSearch Service + Typesense Cloud
License/SaaS 3 tahunRp 0Rp 2,7 miliarRp 1,2 miliar
InfraRp 425 jutaRp 0Rp 0
Ops engineerRp 540 jutaRp 95 jutaRp 130 juta
MigrationRp 60 jutaRp 40 jutaRp 50 juta
Total 3 tahunRp 1,03 miliarRp 2,84 miliarRp 1,38 miliar

Self-host paling murah cash, tapi ops effort 540 juta = ~1,5 FTE engineer 3 tahun. Untuk fintech series-B saya, justify ada 1 SRE dedicated search.

Yang surprising

Setelah 22 bulan: Meilisearch tooling sangat mature untuk skala mid-market. Saya start dengan ekspektasi “akan perlu migrate ke ES untuk scale”, tapi 4 juta document + 850 query/s peak masih comfortable di Meilisearch. Threshold migrate ke ES bukan volume — tapi feature (aggregation kompleks, time-series, vector dense).

Surprise lain: Bahasa Indonesia analyzer di ES setelah saya tune dengan Sastrawi ternyata improve search precision (relevance) lebih signifikan dari ekspektasi. Customer support feedback: pencarian customer name dengan typo / ejaan beda sekarang 90%+ hit rate, sebelumnya 65-70%. Worth 2 minggu effort tuning analyzer.

Verdict

Conditional dengan rule konkret:

  • Log analytics + security forensic + analytical aggregation: Elasticsearch / OpenSearch self-host atau managed. Default enterprise.
  • End-user product search latency-critical: Meilisearch / Typesense self-host. Default SaaS / e-commerce modern.
  • E-commerce dengan revenue depend on search: Algolia. Worth premium untuk personalization + advanced ranking.
  • Skip campur workload — jangan pakai 1 tool untuk semua. ES bukan untuk search end-user, Meilisearch bukan untuk log analytics.

Threshold konkret transisi self-host ke managed: tim SRE < 0,5 FTE atau ops cost time > Rp 30 juta/bulan. Di atas threshold ini, managed makes economic sense.

Ditulis oleh Asti Larasati

// Pick Stack Comparison lain


← Semua picks RSS feed