ElasticSearch
Trang này chứa các mẹo và tài nguyên để chuẩn bị cho các cuộc phỏng vấn ElasticSearch.
Dưới đây là 30 câu hỏi phỏng vấn về Elasticsearch từ cơ bản đến nâng cao, kèm theo câu trả lời chi tiết. Các câu hỏi được sắp xếp theo mức độ khó tăng dần để giúp bạn nắm vững kiến thức từ nền tảng đến chuyên sâu.
Câu hỏi cơ bản
Elasticsearch là gì?
Trả lời: Elasticsearch là một công cụ tìm kiếm và phân tích phân tán, mã nguồn mở, được xây dựng trên Apache Lucene. Nó được thiết kế để xử lý dữ liệu lớn, tìm kiếm full-text nhanh chóng và cung cấp khả năng phân tích dữ liệu theo thời gian thực.
Elasticsearch được sử dụng để làm gì?
Trả lời: Elasticsearch được dùng cho tìm kiếm full-text, phân tích log, giám sát ứng dụng, tìm kiếm doanh nghiệp, và xử lý dữ liệu lớn trong các hệ thống như ELK Stack (Elasticsearch, Logstash, Kibana).
Index trong Elasticsearch là gì?
Trả lời: Index là một tập hợp các tài liệu (documents) có cấu trúc tương tự, tương đương với một cơ sở dữ liệu trong hệ quản trị cơ sở dữ liệu quan hệ (RDBMS). Mỗi index được chia thành các shard để hỗ trợ phân tán.
Document trong Elasticsearch là gì?
Trả lời: Document là đơn vị dữ liệu cơ bản trong Elasticsearch, được biểu diễn dưới dạng JSON. Nó tương đương với một hàng (row) trong cơ sở dữ liệu quan hệ.
Shard và Replica trong Elasticsearch là gì?
Trả lời:
Shard: Là một phần của index, giúp phân chia dữ liệu để xử lý song song và tăng hiệu suất.
Replica: Là bản sao của shard, đảm bảo tính sẵn sàng cao (high availability) và tăng khả năng chịu lỗi.
Cluster trong Elasticsearch là gì?
Trả lời: Cluster là tập hợp các node (máy chủ) hoạt động cùng nhau để lưu trữ dữ liệu và xử lý yêu cầu. Mỗi cluster có một tên duy nhất để nhận diện.
Node trong Elasticsearch là gì?
Trả lời: Node là một instance của Elasticsearch chạy trên một máy chủ. Có các loại node như master, data, ingest, coordinating, v.v., tùy thuộc vào vai trò của nó trong cluster.
Elasticsearch khác gì với cơ sở dữ liệu quan hệ (RDBMS)?
Trả lời: Elasticsearch tối ưu cho tìm kiếm full-text và phân tích dữ liệu phi cấu trúc, trong khi RDBMS phù hợp với dữ liệu có cấu trúc và các truy vấn quan hệ phức tạp. Elasticsearch không hỗ trợ giao dịch (transaction) như RDBMS.
Mapping trong Elasticsearch là gì?
Trả lời: Mapping định nghĩa cách các trường (fields) trong document được lưu trữ và lập chỉ mục (indexed). Nó xác định kiểu dữ liệu (text, keyword, integer, v.v.) và cách chúng được xử lý.
Query DSL trong Elasticsearch là gì?
Trả lời: Query DSL (Domain Specific Language) là ngôn ngữ truy vấn dựa trên JSON mà Elasticsearch sử dụng để thực hiện các truy vấn tìm kiếm, lọc, và phân tích dữ liệu.
Câu hỏi trung cấp
Làm thế nào để thêm dữ liệu vào Elasticsearch?
Trả lời: Dữ liệu được thêm vào bằng cách sử dụng API REST (thường là HTTP POST hoặc PUT) với định dạng JSON. Ví dụ:
Sự khác biệt giữa "text" và "keyword" trong mapping?
Trả lời:
Text: Được phân tích (analyzed) để hỗ trợ tìm kiếm full-text, ví dụ: "Hello World" sẽ bị chia thành "hello" và "world".
Keyword: Không phân tích, được lưu nguyên dạng để lọc hoặc sắp xếp chính xác, ví dụ: "Hello World" giữ nguyên.
Inverted Index trong Elasticsearch là gì?
Trả lời: Inverted Index là cấu trúc dữ liệu mà Elasticsearch sử dụng để ánh xạ từ khóa (term) đến các document chứa chúng, giúp tìm kiếm nhanh chóng.
Analyzer trong Elasticsearch là gì?
Trả lời: Analyzer là bộ xử lý phân tích văn bản, bao gồm tokenizer (chia nhỏ văn bản) và filter (chuẩn hóa từ như lowercase, loại bỏ stop words). Nó được dùng khi lập chỉ mục và tìm kiếm.
Làm thế nào để thực hiện tìm kiếm full-text trong Elasticsearch?
Trả lời: Sử dụng truy vấn
match
trong Query DSL. Ví dụ:
Sự khác biệt giữa
match
vàterm
query?Trả lời:
match
: Dùng cho tìm kiếm full-text, phân tích chuỗi truy vấn trước khi tìm.term
: Dùng cho tìm kiếm chính xác trên trường "keyword", không phân tích chuỗi.
Refresh interval trong Elasticsearch là gì?
Trả lời: Refresh interval là khoảng thời gian mà Elasticsearch làm mới index để dữ liệu mới có thể tìm kiếm được. Mặc định là 1 giây, nhưng có thể điều chỉnh.
Bulk API trong Elasticsearch là gì?
Trả lời: Bulk API cho phép thực hiện nhiều thao tác (index, update, delete) trong một yêu cầu duy nhất, giúp tăng hiệu suất khi xử lý dữ liệu lớn.
Làm thế nào để xóa một index trong Elasticsearch?
Trả lời: Sử dụng lệnh DELETE qua API REST:
Score trong kết quả tìm kiếm của Elasticsearch là gì?
Trả lời: Score là giá trị số đo lường mức độ liên quan (relevance) của document với truy vấn, dựa trên thuật toán TF-IDF và các yếu tố khác.
Câu hỏi nâng cao
Làm thế nào để tối ưu hóa hiệu suất của Elasticsearch?
Trả lời:
Điều chỉnh số lượng shard và replica phù hợp với dữ liệu và tải.
Sử dụng mapping hợp lý để tránh lập chỉ mục không cần thiết.
Tăng refresh interval cho dữ liệu không cần real-time.
Sử dụng Bulk API cho việc nhập dữ liệu lớn.
Routing trong Elasticsearch là gì?
Trả lời: Routing là cơ chế xác định shard nào sẽ lưu trữ document dựa trên một giá trị (thường là ID). Nó giúp cải thiện hiệu suất truy vấn bằng cách giảm số shard cần kiểm tra.
Sự khác biệt giữa primary shard và replica shard?
Trả lời:
Primary shard: Lưu trữ dữ liệu gốc và xử lý các thao tác ghi.
Replica shard: Là bản sao của primary shard, dùng để đọc và tăng tính chịu lỗi.
Cat API trong Elasticsearch là gì?
Trả lời: Cat API cung cấp thông tin trạng thái của cluster, node, index, v.v., dưới dạng dễ đọc cho con người. Ví dụ:
GET /_cat/indices
.
Làm thế nào để xử lý dữ liệu lớn trong Elasticsearch?
Trả lời:
Chia nhỏ dữ liệu thành nhiều index (time-based indices).
Sử dụng scroll API hoặc search_after cho truy vấn phân trang.
Tối ưu hóa shard và sử dụng hardware mạnh.
Reindex API dùng để làm gì?
Trả lời: Reindex API dùng để sao chép dữ liệu từ một index cũ sang index mới, thường để thay đổi mapping hoặc cấu hình shard.
Sự khác biệt giữa
bool
query vàfilter
trong Elasticsearch?Trả lời:
bool
query: Kết hợp các điều kiện (must, should, must_not) và tính score.filter
: Lọc dữ liệu mà không tính score, nhanh hơn khi chỉ cần kết quả đúng/sai.
Cluster health trong Elasticsearch là gì và làm sao để kiểm tra?
Trả lời: Cluster health thể hiện trạng thái của cluster (green, yellow, red). Kiểm tra bằng:
Làm thế nào để xử lý xung đột phiên bản trong Elasticsearch?
Trả lời: Elasticsearch sử dụng cơ chế optimistic concurrency control với trường
_version
. Khi cập nhật, cần chỉ định version hiện tại để tránh xung đột.
Painless scripting trong Elasticsearch là gì?
Trả lời: Painless là ngôn ngữ script an toàn và nhanh của Elasticsearch, dùng để tùy chỉnh truy vấn, cập nhật document, hoặc tính toán trường động. Ví dụ:
Last updated