Hiểu về Index và Mapping trong Elasticsearch

Được rồi, hãy đi sâu hơn vào Index và Mapping trong Elasticsearch, cùng với một số ví dụ để minh họa.

Index trong Elasticsearch

Index là một cơ sở dữ liệu trong Elasticsearch, được sử dụng để lưu trữ các tài liệu có tính liên quan đến nhau. Mỗi Index thường tương ứng với một loại dữ liệu cụ thể trong ứng dụng của bạn.

Ví dụ, nếu bạn có một ứng dụng thương mại điện tử, bạn có thể tạo một Index để lưu trữ thông tin về các sản phẩm, một Index khác để lưu trữ thông tin về người dùng và đơn hàng.

Mỗi Index trong Elasticsearch được phân chia thành các Shard nhỏ để phân tán dữ liệu. Shard là một phần nhỏ của Index, và mỗi Shard có thể được lưu trữ trên một node riêng biệt trong cụm (cluster) Elasticsearch. Việc phân chia dữ liệu thành các Shard giúp tối ưu hóa việc tìm kiếm và truy vấn dữ liệu, đồng thời tăng khả năng mở rộng của hệ thống.

Ví dụ, để tạo một Index mới trong Elasticsearch có tên "products", bạn có thể sử dụng API hoặc các công cụ quản lý như Kibana để thực hiện lệnh sau:

PUT /products
{
  "settings": {
    "number_of_shards": 3,
    "number_of_replicas": 2
  }
}

Trong ví dụ trên, chúng ta đã tạo một Index "products" với 3 Shard và 2 bản sao (replica) của mỗi Shard để đảm bảo tính sẵn sàng và sao lưu dữ liệu.

 

Mapping trong Elasticsearch

Mapping là quá trình định nghĩa cách mà Elasticsearch lưu trữ và xử lý dữ liệu trong một Index. Khi bạn thêm một tài liệu mới vào Index, Elasticsearch sẽ sử dụng Mapping để xác định kiểu dữ liệu của từng trường trong tài liệu. Điều này giúp Elasticsearch hiểu cách xử lý và tìm kiếm dữ liệu trong các trường khác nhau.

Ví dụ, nếu chúng ta có Index "products" và muốn định nghĩa Mapping cho các trường "name" (tên sản phẩm) và "price" (giá sản phẩm) là kiểu văn bản và số, chúng ta có thể thực hiện lệnh sau:

PUT /products/_mapping
{
  "properties": {
    "name": {
      "type": "text"
    },
    "price": {
      "type": "float"
    }
  }
}

Trong ví dụ trên, chúng ta đã định nghĩa Mapping cho Index "products" với trường "name" có kiểu dữ liệu là "text" và trường "price" có kiểu dữ liệu là "float". Như vậy, khi Elasticsearch nhận được tài liệu mới cho Index "products", nó sẽ đảm bảo các trường "name" và "price" được lưu trữ và xử lý theo kiểu dữ liệu đã định nghĩa.

 

Qua đó, Index và Mapping đóng vai trò quan trọng trong việc tổ chức và quản lý dữ liệu trong Elasticsearch. Chúng giúp Elasticsearch hiểu và xử lý dữ liệu một cách hiệu quả, tối ưu hóa việc tìm kiếm và truy vấn, và cung cấp các khả năng mở rộng linh hoạt cho hệ thống.