blog.dopana

Back

Trong nhiều ứng dụng web hiện nay, tính năng tìm kiếm là một phần rất quan trọng:

  • Website thương mại điện tử cần tìm sản phẩm nhanh
  • Blog cần tìm bài viết
  • SaaS cần tìm dữ liệu trong dashboard
  • Ứng dụng AI cần tìm kiếm knowledge base

Các database thông thường như PostgreSQL hoặc MySQL có thể hỗ trợ tìm kiếm cơ bản, nhưng khi dữ liệu lớn hơn, yêu cầu tìm kiếm thông minh hơn thì cần một search engine chuyên dụng.

Một trong những lựa chọn đang được nhiều developer quan tâm là Typesense.

Typesense Là Gì?#

Typesense là một open-source search engine tập trung vào:

  • Tốc độ tìm kiếm cực nhanh
  • API đơn giản
  • Dễ deploy
  • Hỗ trợ typo tolerance (sửa lỗi chính tả)
  • Phù hợp cho autocomplete và instant search

Có thể hiểu đơn giản:

Typesense giống như một phiên bản nhẹ hơn, dễ dùng hơn của Elasticsearch.

Thay vì phải cấu hình rất nhiều thứ như Elasticsearch, Typesense hướng tới trải nghiệm developer:

Install → Import data → Search

Typesense Hoạt Động Như Thế Nào?#

Typesense không thay thế database chính. Một kiến trúc phổ biến:

          User
             |
           Frontend
             |
         Typesense
             |
    -------------------
    |                 |
PostgreSQL          MySQL
 (hoặc API)    (hoặc MongoDB)
plaintext

Database vẫn giữ dữ liệu chính. Typesense chỉ lưu một bản index để phục vụ tìm kiếm nhanh.

Ví dụ, dữ liệu trong database:

{
  "id": 1,
  "name": "iPhone 15 Pro",
  "description": "Điện thoại Apple mới nhất"
}
json

Được index vào Typesense:

{
  "id": "1",
  "name": "iPhone 15 Pro",
  "description": "Điện thoại Apple mới nhất"
}
json

Khi user search iphone 15, Typesense trả kết quả gần như ngay lập tức.

Tính Năng Nổi Bật#

1. Typo Tolerance#

Người dùng thường nhập sai. iphnoe thay vì iphone. Typesense vẫn hiểu và trả về sản phẩm phù hợp. Điều này rất quan trọng với ecommerce, search sản phẩm, documentation.

Typesense được thiết kế cho trải nghiệm gõ đến đâu search đến đó:

User types: macbo

Result appears immediately
plaintext

Không cần bấm nút Search. Phù hợp cho search bar, autocomplete, command palette.

3. API Đơn Giản#

Tạo collection:

{
  "name": "products",
  "fields": [
    { "name": "name", "type": "string" },
    { "name": "price", "type": "int32" }
  ]
}
json

Search với JavaScript:

const results = await client
  .collections('products')
  .documents()
  .search({
    q: 'iphone',
    query_by: 'name'
  })
javascript

Rất ít config.

Typesense vs Elasticsearch#

Tiêu chíTypesenseElasticsearch
SetupDễPhức tạp
Learning curveThấpCao
Performance (nhỏ/vừa)Rất nhanhNhanh
Distributed systemRất mạnh
Full text searchTốtRất mạnh
AnalyticsCơ bảnMạnh
Resource cần dùngÍtNhiều

Nếu bạn xây blog, ecommerce nhỏ, SaaS, startup MVP — Typesense thường là lựa chọn hợp lý hơn.

Nếu bạn xây search hàng tỷ document, log analytics, enterprise search — Elasticsearch có nhiều lợi thế hơn.

Typesense vs Algolia#

Algolia là search service dạng SaaS.

Tiêu chíTypesenseAlgolia
Open sourceKhông
Self-hostKhông
PricingServer costTheo usage
Control dữ liệuCaoThấp hơn
SetupCần tự quản lýRất dễ

Nếu muốn không phụ thuộc vendor, host trên server riêng, kiểm soát dữ liệu — Typesense là lựa chọn tốt.

Cài Đặt Typesense Bằng Docker#

Cách nhanh nhất:

docker run \
  -p 8108:8108 \
  -v /tmp/typesense-data:/data \
  typesense/typesense:27.0 \
  --data-dir /data \
  --api-key=xyz
bash

Sau đó truy cập:

http://localhost:8108
plaintext

API:

GET /collections
plaintext

Kết Nối JavaScript#

Cài SDK:

npm install typesense
bash

Config:

import Typesense from 'typesense'

const client = new Typesense.Client({
  nodes: [{
    host: 'localhost',
    port: '8108',
    protocol: 'http'
  }],
  apiKey: 'xyz'
})
javascript

Search:

const result = await client
  .collections('products')
  .documents()
  .search({
    q: 'iphone',
    query_by: 'name'
  })

console.log(result)
javascript

Typesense Phù Hợp Với Dự Án Nào?#

Blog — Search bài viết theo nội dung:

Search: "react hook"
→ Bài viết: "React useEffect và useState"
plaintext

Ecommerce — Search sản phẩm có typo:

iphone 15 black
→ iPhone 15 Pro Max Black
→ iPhone 15 Case Black
plaintext

SaaS Dashboard — Search dữ liệu nhanh:

customer@email.com
invoice 2026
project name
plaintext

Documentation — Search tài liệu:

authentication jwt
→ JWT Authentication Guide
→ API Token Documentation
plaintext

Khi Nào Không Nên Dùng Typesense?#

Không cần Typesense nếu:

  • Database nhỏ
  • Chỉ search chính xác
  • Ít dữ liệu
  • Không cần typo tolerance

Ví dụ một câu query đơn giản là đủ:

SELECT * FROM users WHERE email = 'abc@gmail.com'
sql

Kết Luận#

Typesense là search engine hiện đại, nhẹ và developer-friendly.

Điểm mạnh:

  • Tốc độ tìm kiếm rất nhanh
  • API đơn giản
  • Deploy dễ bằng Docker
  • Mã nguồn mở
  • Typo tolerance tốt

Với các dự án blog, ecommerce, SaaS hoặc startup MVP, Typesense là lựa chọn đáng cân nhắc thay vì phải triển khai Elasticsearch phức tạp.

Nếu cần một search engine chạy được nhanh, ít đau đầu — Typesense là một trong những lựa chọn tốt hiện nay.

Tài liệu tham khảo#