Elasticsearch là một công cụ tìm kiếm mạnh mẽ và có khả năng mở rộng cao, thường được sử dụng để tìm kiếm văn bản toàn phần, phân tích log, và lưu trữ dữ liệu dạng phi cấu trúc. Trong bài viết này, chúng ta cùng tìm hiểu cách Elasticsearch hoạt động và cách tích hợp nó vào một ứng dụng Node.js đơn giản nhé.
Elasticsearch là gì?

Elasticsearch là một search engine mã nguồn mở, xây dựng dựa trên Apache Lucene – một thư viện tìm kiếm cấp thấp mạnh mẽ. Elasticsearch cung cấp giao diện RESTful để lưu trữ và truy vấn dữ liệu nhanh chóng bằng cách sử dụng các tài liệu JSON.
Một số ứng dụng phổ biến:
- Tìm kiếm văn bản toàn phần (full-text search)
- Gợi ý tìm kiếm (auto-complete)
- Phân tích log hệ thống (ELK Stack)
- Gợi ý sản phẩm (recommendation engine)
- Phân tích dữ liệu phi cấu trúc theo thời gian thực
Elasticsearch hoạt động như thế nào?

Để hiểu cách Elasticsearch hoạt động, bạn cần nắm một số khái niệm chính:
1. Document
Đây là đơn vị dữ liệu nhỏ nhất, tương đương với một record trong cơ sở dữ liệu. Dữ liệu được lưu ở dạng JSON.
{
"name": "Laptop Dell XPS 13",
"price": 2500,
"description": "A high-end ultrabook from Dell."
}
2. Index
Tập hợp các document có cấu trúc tương tự nhau. Mỗi index giống như một bảng trong RDBMS (cơ sở dữ liệu quan hệ).
3. Shards và Replicas
- Shards: Mỗi index có thể được chia nhỏ thành nhiều shard để dễ mở rộng.
- Replicas: Bản sao của shards để đảm bảo tính sẵn sàng và an toàn dữ liệu.
4. Inverted Index
Đây là trái tim của Elasticsearch – một cấu trúc dữ liệu dùng để tìm kiếm văn bản cực kỳ nhanh. Nó hoạt động như sau:
Ví dụ ta có 2 câu:
- Document 1: “Laptop Dell XPS”
- Document 2: “Dell ultrabook high-end”
Elasticsearch sẽ lập chỉ mục các từ, kiểu như:
Từ khóa | Xuất hiện trong document |
---|---|
dell | 1, 2 |
laptop | 1 |
ultrabook | 2 |
high-end | 2 |
Khi bạn tìm “dell”, Elasticsearch không cần quét toàn bộ dữ liệu mà chỉ cần tra bảng này → tốc độ cực nhanh.
Cài Đặt Elasticsearch
1. Cài Elasticsearch (bản local)
Tải về từ: https://www.elastic.co/downloads/elasticsearch
Khởi chạy:
./bin/elasticsearch
Mặc định, Elasticsearch sẽ chạy ở http://localhost:9200
.
2. Cài Node.js và Elasticsearch client
npm init -y
npm install @elastic/elasticsearch
3. Kết Nối Elasticsearch Bằng Node.js
// file: elasticClient.js
const { Client } = require('@elastic/elasticsearch');
const client = new Client({
node: 'http://localhost:9200',
});
module.exports = client;
4. Tạo Index và Thêm Document
// file: index.js
const client = require('./elasticClient');
async function run() {
const indexName = 'products';
const exists = await client.indices.exists({ index: indexName });
if (!exists.body) {
await client.indices.create({ index: indexName });
console.log(`Created index: ${indexName}`);
}
await client.index({
index: indexName,
id: '1',
body: {
name: 'Laptop Dell XPS 13',
price: 2500,
description: 'A high-end ultrabook from Dell.',
},
});
console.log('Document inserted!');
}
run().catch(console.error);
5. Tìm Kiếm Văn Bản
async function searchProduct(query) {
const result = await client.search({
index: 'products',
body: {
query: {
match: {
description: query,
},
},
},
});
console.log('Kết quả tìm kiếm:');
result.body.hits.hits.forEach((hit) => {
console.log(hit._source);
});
}
searchProduct('ultrabook');
6. Xóa Index (nếu cần)
async function deleteIndex() {
await client.indices.delete({ index: 'products' });
console.log('Index deleted');
}
deleteIndex();
Tổng Kết
Trong bài viết này, bạn đã học cách:
- Elasticsearch hoạt động như thế nào với cấu trúc Inverted Index
- Cài đặt và kết nối Elasticsearch bằng Node.js
- Tạo index và thêm dữ liệu
- Tìm kiếm văn bản trong dữ liệu phi cấu trúc
Elasticsearch là một công cụ mạnh mẽ, đặc biệt phù hợp với các ứng dụng cần tìm kiếm nhanh, phân tích thời gian thực, hoặc xử lý big data.
Nếu bạn muốn triển khai Elasticsearch với Docker, tích hợp Kibana, hay xây dựng chức năng auto-complete như Google Search, hãy để lại bình luận để mình viết tiếp phần sau nhé. Cảm ơn các bạn đã đọc bài và hẹn gặp lại trong các bài viết tiếp theo của mình.
Elasticsearch là một công cụ tìm kiếm mạnh mẽ và có khả năng mở rộng cao, thường được sử dụng để tìm kiếm văn bản toàn phần, phân tích log, và lưu trữ dữ liệu dạng phi cấu trúc. Trong bài viết này, chúng ta cùng tìm hiểu cách Elasticsearch hoạt động và cách tích hợp nó vào một ứng dụng Node.js đơn giản nhé.