Typesense — Search Engine Nguồn Mở Cho Ứng Dụng Hiện Đại
Typesense là search engine C++ siêu nhanh, typo-tolerant, mã nguồn mở. Hỗ trợ vector search, semantic search, geo search, và hơn thế nữa.
Tìm kiếm là một trong những tính năng khó làm đúng nhất. Elasticsearch quá nặng để setup và vận hành. Algolia quá đắt khi scale. Typesense là lựa chọn thứ ba — mã nguồn mở, chạy nhanh, dễ deploy, và đầy đủ tính năng hiện đại.
Typesense Là Gì?#
Typesense là search engine mã nguồn mở (GPL-3.0, 26k+ sao GitHub), viết bằng C++. Nó được thiết kế để thay thế Algolia (cho người muốn tự host) và Elasticsearch (cho người muốn đơn giản hơn).
Một binary duy nhất, không runtime dependency, chạy ngay với một câu lệnh.
Tính Năng Chính#
Tìm Kiếm Cơ Bản#
- Typo Tolerance — Xử lý lỗi chính tả ngay khi đánh, không cần cấu hình
- Tunable Ranking — Tuỳ chỉnh ranking theo ý muốn
- Sorting — Sort theo field dynamic
- Faceting & Filtering — Lọc và phân loại kết quả
- Grouping & Distinct — Nhóm kết quả tương tự
- Federated Search — Search nhiều collection trong một request
- Geo Search — Tìm kiếm quanh toạ độ / trong bounding box
- JOINs — Kết nối collection qua reference field
AI & Hiện Đại#
- Vector Search — Tìm nearest neighbor cho embedding
- Semantic / Hybrid Search — Tự động sinh embedding từ S-BERT, E-5, hoặc OpenAI, PaLM
- Conversational Search (RAG) — Đặt câu hỏi, Typesense trả lời bằng câu hoàn chỉnh dựa trên dữ liệu của bạn
- Natural Language Search — Chuyển đổi câu hỏi tự nhiên thành filter và sort
- Image Search — Tìm ảnh bằng mô tả văn bản qua CLIP model
- Voice Search — Ghi âm giọng nói, Typesense nhận dạng qua Whisper và tìm kiếm
Hạ Tầng#
- Scoped API Keys — API key chỉ truy cập một số record nhất định
- Synonyms — Từ đồng nghĩa
- Curation & Merchandizing — Boost record lên vị trí cố định
- Raft-based Clustering — Cluster phân tán, high availability
- No Runtime Dependencies — Một binary duy nhất
Hiệu Năng#
Kết quả benchmark trên server 4 vCPU:
| Dataset | Records | RAM | Index time | Throughput | Latency |
|---|---|---|---|---|---|
| Recipes | 2.2M | 900MB | 3.6min | 104 qps | 11ms |
| Books (OpenLibrary) | 28M | 14GB | 78min | 46 qps | 28ms |
| Amazon Products | 3M | — | — | 250 qps | — |
Typesense Cloud phục vụ 10 tỷ search mỗi tháng. Docker images đã được download hơn 12 triệu lần.
So Sánh Với Elasticsearch#
| Tiêu chí | Typesense | Elasticsearch |
|---|---|---|
| Ngôn ngữ | C++ (single binary) | Java (JVM) |
| Config | Smart defaults, ít config | Hàng ngàn tham số |
| Setup | Docker một lệnh | Phức tạp, cần tuning JVM |
| Dùng cho | Search UX, ứng dụng | Logs, billions docs |
| RAM khi mới start | ~30MB | ~1GB+ |
So Sánh Với Algolia#
| Tiêu chí | Typesense | Algolia |
|---|---|---|
| Loại | Open source, tự host / cloud | SaaS, proprietary |
| Chi phí | Fixed hourly (Typesense Cloud) | Theo records + operations |
| Sort order | Một index đa sort | Nhiều index = tốn memory |
| Config | Query time | Index time |
Quick Start#
Chạy Typesense với Docker:
docker run -p 8108:8108 -v/tmp/data:/data \
typesense/typesense:30.2 \
--data-dir /data \
--api-key=Hu52dwsas2AdxdEbashTạo collection và index document (Python):
import typesense
client = typesense.Client({
'api_key': 'Hu52dwsas2AdxdE',
'nodes': [{
'host': 'localhost', 'port': '8108', 'protocol': 'http'
}],
'connection_timeout_seconds': 2
})
# Tạo collection
client.collections.create({
"name": "companies",
"fields": [
{"name": "company_name", "type": "string"},
{"name": "num_employees", "type": "int32"},
{"name": "country", "type": "string", "facet": True}
],
"default_sorting_field": "num_employees"
})
# Index document
client.collections['companies'].documents.create({
"id": "124",
"company_name": "Stark Industries",
"num_employees": 5215,
"country": "USA"
})
# Search — có typo vẫn tìm được
client.collections['companies'].documents.search({
'q': 'stork',
'query_by': 'company_name',
'filter_by': 'num_employees:>100',
'sort_by': 'num_employees:desc'
})python
storkvẫn tìm raStark Industries— typo tolerance hoạt động ngay khi đánh sai.
Framework Integrations#
Typesense có sẵn client cho hầu hết ngôn ngữ — JavaScript, Python, PHP, Ruby, Go, Java, Rust, Dart — và tích hợp với Laravel, WordPress, WooCommerce, Docusaurus, Gatsby, Symfony, InstantSearch, Firebase.
Live Demos#
Typesense cung cấp nhiều demo thực tế trên các dataset lớn:
- 32M songs ↗ (MusicBrainz)
- 28M books ↗ (OpenLibrary)
- 2M recipes ↗ (RecipeNLG)
- E-commerce store ↗
- GeoSearch Airbnb ↗
- Semantic search HN ↗
Kết Luận#
Typesense là search engine lý tưởng nếu bạn cần search nhanh, dễ deploy, không muốn quản lý Elasticsearch phức tạp hay trả tiền Algolia đắt đỏ. Một binary C++, đầy đủ vector search + semantic search + RAG — đủ cho hầu hết ứng dụng cần tìm kiếm.