Giới thiệu về Indices trong Elasticsearch
Elasticsearch là một công cụ tìm kiếm mạnh mẽ, và việc hiểu rõ về indices là rất quan trọng trong quá trình triển khai và sử dụng. Trong bài viết này, chúng ta sẽ tìm hiểu cách tạo và quản lý indices trong Elasticsearch, từ việc kiểm tra các indices hiện có cho đến việc thiết lập settings và mappings.
Kiểm Tra Các Indices Hiện Có
Trước khi bắt đầu tạo index mới, chúng ta cần kiểm tra xem có indices nào đã được tạo ra hay chưa. Sử dụng Indices APIs để kiểm tra trạng thái hiện tại của cluster:
$ http https://localhost:9200/_stats
Kết quả trả về sẽ cho chúng ta biết cluster hiện tại chưa có bất kỳ index nào:
{
"_all": {
"primaries": {},
"total": {}
},
"_shards": {
"failed": 0,
"successful": 0,
"total": 0
},
"indices": {}
}
Tạo Index Mới cho Book Catalog
Với cluster không có indices, chúng ta có thể tiến hành tạo một index cho book catalog. Elasticsearch giao tiếp qua JSON, vì vậy trước tiên chúng ta sẽ tạo một file JSON để định nghĩa settings và mappings.
Nội Dung của Tệp catalog-index.json
json
{
"settings": {
"index": {
"number_of_shards": 5,
"number_of_replicas": 2
}
},
"mappings": {
"books": {
"_source": { "enabled": true },
"properties": {
"title": { "type": "text" },
"categories": {
"type": "nested",
"properties": {
"name": { "type": "text" }
}
},
"publisher": { "type": "keyword" },
"description": { "type": "text" },
"published_date": { "type": "date" },
"isbn": { "type": "keyword" },
"rating": { "type": "byte" }
}
},
"authors": {
"properties": {
"first_name": { "type": "keyword" },
"last_name": { "type": "keyword" }
},
"_parent": { "type": "books" }
}
}
}
Tạo Index Bằng Index API
Sau khi đã chuẩn bị tệp JSON, chúng ta có thể tạo index cho catalog bằng cách sử dụng Index API:
$ http PUT https://localhost:9200/catalog < catalog-index.json
Khi thực hiện thành công, chúng ta sẽ nhận được phản hồi như sau:
{
"acknowledged": true,
"shards_acknowledged": true
}
Xác Nhận Index Được Tạo Thành Công
Để kiểm tra xem index đã được tạo thành công hay chưa, chúng ta có thể kiểm tra lại settings của nó:
$ http https://localhost:9200/catalog/_settings
Kết quả sẽ cho chúng ta biết các thông tin chi tiết về index vừa tạo:
{
"catalog": {
"settings": {
"index": {
"creation_date": "1487428863824",
"number_of_replicas": "2",
"number_of_shards": "5",
"provided_name": "catalog",
"uuid": "-b63dCesROC5UawbHz8IYw",
"version": {
"created": "5020099"
}
}
}
}
}
Thay Đổi Settings Sau Khi Tạo Index
Một câu hỏi thường gặp là chúng ta có thể thay đổi số lượng shards của index sau khi đã tạo hay không. Đáng tiếc là câu trả lời là không. Nếu bạn thử thay đổi, bạn sẽ nhận được lỗi:
$ echo '{"index":{"number_of_shards":6}}' | http PUT https://localhost:9200/catalog/_settings
Kết quả lỗi là:
{
"error": {
"reason": "can't change the number of shards for an index",
"root_cause": [],
"type": "illegal_argument_exception"
},
"status": 400
}
Kiểm Tra Mappings của Index
Chúng ta cũng có thể kiểm tra mapping types của index bằng lệnh sau:
$ http https://localhost:9200/catalog/_mapping
Kết quả sẽ cho biết các loại mappings hiện có trong index:
{
"catalog": {
"mappings": {
"authors": { ... },
"books": { ... }
}
}
}
Phân Tích Field Trước Khi Thêm Dữ Liệu
Một tính năng cực kỳ hữu ích của Indices APIs là khả năng thực hiện analysis process trên một index mapping type mà không cần gửi bất kỳ document nào. Điều này rất hữu ích để kiểm tra xem các mapping parameters có hoạt động chính xác hay không trước khi thêm dữ liệu thực tế vào Elasticsearch index:
$ http https://localhost:9200/catalog/_analyze field=books.title text="Elasticsearch: The Definitive Guide"
Kết quả:
{
"tokens": [
{
"end_offset": 13,
"position": 0,
"start_offset": 0,
"token": "elasticsearch",
"type": ""
},
{
"end_offset": 18,
"position": 1,
"start_offset": 15,
"token": "the",
"type": ""
},
{
"end_offset": 88,
"position": 11,
"start_offset": 82,
"token": "engine",
"type": ""
}
]
}
Quản Lý Trạng Thái của Index
Mỗi index trong Elasticsearch có thể ở trạng thái open hoặc closed. Để thay đổi trạng thái của index, bạn có thể sử dụng API sau:
$ http POST https://localhost:9200/catalog/_open
Phản hồi thành công sẽ hiển thị:
{
"acknowledged": true
}
Kết Luận
Trong bài viết này, chúng ta đã thảo luận về cách tạo và quản lý indices trong Elasticsearch. Việc hiểu rõ về indices không chỉ giúp chúng ta tổ chức dữ liệu tốt hơn mà còn tối ưu hóa hiệu suất tìm kiếm trong ứng dụng của mình. Hy vọng những hướng dẫn này sẽ hữu ích cho bạn trong quá trình làm việc với Elasticsearch!