

Trong hầu hết các hệ thống hiện đại, dữ liệu phát sinh liên tục từ ứng dụng, website, thiết bị IoT và các dịch vụ backend. Tuy nhiên, việc lưu trữ dữ liệu thôi là chưa đủ. Điều quan trọng hơn là khả năng tìm kiếm, thống kê và phân tích dữ liệu theo thời gian thực. OpenSearch là hệ thống tìm kiếm tốc độ cao, phân tích log, giám sát ứng dụng và trực quan hóa dữ liệu chỉ trong vài phút.
Bài viết này sẽ giúp bạn hiểu rõ hơn về OpenSearch, cách tổ chức dữ liệu và thực hiện các thao tác cơ bản trên hệ thống.
OpenSearch là công cụ tìm kiếm mã nguồn mở hỗ trợ:
Một số trường hợp sử dụng phổ biến:

Trong OpenSearch, dữ liệu được lưu dưới dạng Document. Nhiều Document tạo thành một Index. Có thể hình dung:
Database | OpenSearch |
| Database | Cluster |
| Table | Index |
| Row | Document |
| Column | Field |
Ví dụ:
Index:
productsDocument:
{
"name":"MacBook Air",
"brand":"Apple",
"price":32000000
}Nếu Index chưa tồn tại, OpenSearch có thể tự tạo khi Document đầu tiên được thêm vào.
Ví dụ:
PUT /products/_doc/1
{
"name":"MacBook Air",
"brand":"Apple",
"price":32000000
}Ở ví dụ trên:
Sau khi thực hiện, Document sẽ được đánh Index để phục vụ tìm kiếm.
PUT được sử dụng khi muốn tự chỉ định ID.
Ví dụ:
PUT /products/_doc/10
{
"name":"iPhone 16",
"price":28000000
}Document sẽ luôn có ID bằng 10.
Nếu không muốn tự tạo ID, hãy dùng POST.
POST /products/_doc
{
"name":"Galaxy S26",
"price":26000000
}OpenSearch sẽ sinh ID ngẫu nhiên.
Ví dụ:
A9df92Ksld9Qa8Điều này rất hữu ích khi ingest hàng triệu bản ghi.
Muốn cập nhật dữ liệu chỉ cần sử dụng POST với ID đã tồn tại.
POST /products/_doc/10
{
"name":"iPhone 16 Pro",
"price":35000000
}Nếu Document chưa tồn tại, OpenSearch sẽ tự tạo mới.
Khi cần import hàng nghìn hoặc hàng triệu Document, việc gửi từng request sẽ rất chậm. Bulk API cho phép thực hiện nhiều thao tác trong một request.
Ví dụ:
POST /_bulk
{ "index": { "_index":"products","_id":"1"} }
{ "name":"Laptop Dell","price":22000000 }
{ "index": { "_index":"products","_id":"2"} }
{ "name":"MacBook Pro","price":55000000 }
{ "index": { "_index":"products","_id":"3"} }
{ "name":"ThinkPad X1","price":42000000 }Ngoài Index, Bulk API còn hỗ trợ:
Việc gom nhiều thao tác vào một request giúp tăng tốc độ ingest dữ liệu đáng kể.
Sau khi dữ liệu được Index, có thể thực hiện truy vấn.
GET /products/_search
{
"query":{
"match":{
"name":"MacBook"
}
}
}Kết quả sẽ trả về các Document chứa từ khóa "MacBook".
Term Query phù hợp với dữ liệu chính xác.
GET /products/_search
{
"query":{
"term":{
"brand":"Apple"
}
}
}Ví dụ tìm sản phẩm từ 20 đến 40 triệu.
GET /products/_search
{
"query":{
"range":{
"price":{
"gte":20000000,
"lte":40000000
}
}
}
}Mapping quyết định kiểu dữ liệu của từng Field.
Ví dụ:
PUT /products
{
"mappings":{
"properties":{
"name":{
"type":"text"
},
"brand":{
"type":"keyword"
},
"price":{
"type":"integer"
},
"created_at":{
"type":"date"
}
}
}
}Một số kiểu dữ liệu phổ biến:
Type | Mục đích |
| text | Full-text Search |
| keyword | Tìm kiếm chính xác |
| integer | Số nguyên |
| long | Số lớn |
| float | Số thực |
| boolean | True/False |
| date | Ngày giờ |
| object | JSON Object |
Việc định nghĩa Mapping ngay từ đầu giúp cải thiện hiệu năng tìm kiếm và tránh lỗi khi dữ liệu tăng trưởng.
OpenSearch hỗ trợ sắp xếp kết quả theo nhiều trường.
Ví dụ:
GET /products/_search
{
"query":{
"match_all":{}
},
"sort":[
{
"price":"asc"
}
]
}Có thể sắp xếp theo:
Khi triển khai OpenSearch trong môi trường Production, nên áp dụng các khuyến nghị sau:
OpenSearch là một nền tảng mạnh mẽ để xây dựng các hệ thống tìm kiếm và phân tích dữ liệu trên Cloud.
Bằng cách nắm vững các khái niệm về Index, Document, Mapping, Bulk API và các kỹ thuật truy vấn, bạn có thể xây dựng những hệ thống có khả năng xử lý khối lượng dữ liệu lớn, đáp ứng nhu cầu tìm kiếm và phân tích theo thời gian thực. Khi kết hợp cùng OpenSearch Dashboards, dữ liệu không chỉ được lưu trữ hiệu quả mà còn có thể trực quan hóa thành các biểu đồ và dashboard phục vụ giám sát, phân tích và ra quyết định. Đây là nền tảng phù hợp cho nhiều bài toán như phân tích log, giám sát ứng dụng, tìm kiếm sản phẩm, xử lý sự kiện và phân tích dữ liệu doanh nghiệp ở quy mô lớn.
