Thứ Tư, 29/07/2026, 17:00 (GMT+0)

Hướng dẫn Indexing và Search trên OpenSearch

Quay lại Trang chủ Blog
Trên trang này

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.

Tổng quan về OpenSearch

OpenSearch là công cụ tìm kiếm mã nguồn mở hỗ trợ:

  • Full-text Search
  • Structured Search
  • Log Analytics
  • Dashboard trực quan
  • Machine Learning
  • Alerting
  • Security
  • REST API

Một số trường hợp sử dụng phổ biến:

  • Phân tích log ứng dụng
  • Giám sát hệ thống
  • Website Search
  • Product Search
  • Phân tích dữ liệu IoT
  • Security Analytics
  • Business Intelligence
open-search.jpg

Tổng quan về Index

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

DatabaseCluster
TableIndex
RowDocument
ColumnField

Ví dụ:

Index:

products

Document:

{
    "name":"MacBook Air",
    "brand":"Apple",
    "price":32000000
}

Thêm dữ liệu vào Index

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:

  • products là Index
  • 1 là Document ID
  • phần JSON chính là dữ liệu cần lưu.

Sau khi thực hiện, Document sẽ được đánh Index để phục vụ tìm kiếm.

PUT và POST khác nhau như thế nào?

PUT

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.

POST

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.

Cập nhật Document

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.

Bulk API

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ợ:

  • create
  • update
  • delete

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ể.

Tìm kiếm dữ liệu

Sau khi dữ liệu được Index, có thể thực hiện truy vấn.

Match Query

GET /products/_search
{
    "query":{
        "match":{
            "name":"MacBook"
        }
    }
}

Kết quả sẽ trả về các Document chứa từ khóa "MacBook".

Term Query

Term Query phù hợp với dữ liệu chính xác.

GET /products/_search
{
    "query":{
        "term":{
            "brand":"Apple"
        }
    }
}

Range Query

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

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

textFull-text Search
keywordTìm kiếm chính xác
integerSố nguyên
longSố lớn
floatSố thực
booleanTrue/False
dateNgày giờ
objectJSON 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.

Sorting

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:

  • Giá
  • Thời gian tạo
  • Điểm đánh giá
  • Mức độ liên quan
  • Tên sản phẩm

Best Practices

Khi triển khai OpenSearch trong môi trường Production, nên áp dụng các khuyến nghị sau:

  • Không mở quyền Public Access nếu không thực sự cần thiết.
  • Đặt Domain trong VPC để tăng cường bảo mật.
  • Sử dụng IAM Role và Security Groups nhằm kiểm soát quyền truy cập.
  • Thiết lập Snapshot tự động để sao lưu dữ liệu định kỳ.
  • Phân tách Index theo loại dữ liệu hoặc theo thời gian (ví dụ: log-2026.07.28).
  • Xây dựng Index Template để chuẩn hóa Mapping giữa các Index.
  • Theo dõi các chỉ số Cluster Health, CPU, JVM Heap và Storage.
  • Áp dụng Index State Management (ISM) để tự động xóa hoặc chuyển dữ liệu cũ sang các lớp lưu trữ phù hợp.
  • Sử dụng Bulk API khi ingest dữ liệu số lượng lớn nhằm giảm tải cho hệ thống.
  • Kiểm tra Mapping trước khi đưa vào Production để tránh việc phải reindex do thay đổi kiểu dữ liệu.

Kết luận

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.

#CloudWave Radar
#CloudWave Radar
Sovereign Cloud không chỉ là đặt máy chủ trong nước. Với bối cảnh pháp lý dữ liệu mới tại Việt Nam, đây đang trở thành bài toán hạ tầng quan trọng cho doanh nghiệp Việt và doanh nghiệp nước ngoài hoạt động tại Việt Nam
Sovereign Cloud - Đám mây chủ quyền là gì? Và vì sao doanh nghiệp hoạt động tại Việt Nam nên quan tâm từ bây giờ?
Tiếp tục đọc