Share

Quay lại
Trang chủ / Kiến thức / Phát triển offshore / Query performance tuning – tối ưu hóa truy vấn với Elasticsearch

Query performance tuning – tối ưu hóa truy vấn với Elasticsearch

15/12/2023
01/12/2021
Query performance tuning – tối ưu hóa truy vấn với Elasticsearch

Elasticsearch, một search engine đã quá nổi tiếng ở thời điểm hiện tại. Đã có rất nhiều bài viết khác nhau để giới thiệu sâu vào chi tiết các hoạt động và ứng dụng của Elasticsearch. Các bạn có thể tham khảo thêm tại bài viết Thuật toán score đánh giá và xếp hạng trong Elasticsearch để đọc Elasticsearch là gì.

Việc tìm kiếm hiệu quả là rất tốt, nhưng tốc độ cũng là một vấn đề cần được quan tâm và cải thiện. Trong bài viết này chúng ta sẽ đi tìm hiểu cách thức tối ưu hóa truy vấn (query performance tuning) nhằm cải thiện tốc độ tìm kiếm của Elasticsearch.

1. Các loại query (truy vấn) trong Elasticsearch

Trong Elasticsearch hỗ trợ một số các loại câu truy vấn nhất định, phổ biến nhất có thể kể đến như: 

  • Bool query: có thể kết hợp các câu truy vấn khác nhau, điều chỉnh tham số để cho các câu query thuộc một hoặc nhiều điều kiện khác nhau tùy thuộc vào từng bài toán

  • Match all query: Là câu truy vấn đơn giản và phổ biến nhất dường như có thể sử dụng ở mọi dự án

  • Term level query: Đây là loại truy vấn thường được sử dụng trong dữ liệu có cấu trúc như số, ngày tháng năm và enums

  • Full text query: Thực hiện truy vấn đối với từng field sau khi đã phân tích data

Ngoài ra còn nhiều loại truy vấn nữa. 

2. Tối ưu hóa câu truy vấn trong Elasticsearch

2.1 Đặt vấn đề bài toán

Tùy thuộc vào từng bài toán ta sẽ chọn các kiểu truy vấn khác nhau sao cho phù hợp. Trong bài viết này chúng ta sẽ bàn tới Bool query. Bool query áp dụng với một số bài toán question - answering, hoặc các bài toán đòi hỏi kết hợp nhiều câu truy vấn khác nhau từ các token được tách từ câu truy vấn. (hiểu rõ hơn thông qua hình minh họa). Vì với những hệ thống trả lời hay gợi ý thì việc thực hiện full-text query sẽ kém hiệu quả hơn.

Hình 1: Truy vấn một câu bằng cách kết hợp các query token của câu đó

Cùng với đó, việc sử dụng các từ đồng nghĩa, từ viết tắt để tạo ra các biến thiên khác nhau của câu truy vấn sẽ tăng hiệu quả của việc tìm kiếm. Điều này do một câu được truy vấn, chưa chắc câu trả lời mong muốn sẽ chứa đúng token được tách ra từ câu query đó. Nhiều trường hợp kết quả truy vấn sẽ chứa các biến thể khác nhau của token đó, nhưng vẫn giữ nguyên được ý nghĩa (Ví dụ như hình minh họa).

 

Hình 2: Query một câu bằng cách kết hợp các query token với biến thể token

Đối với các biến thể thì khi thực hiện truy vấn bằng token này sẽ không query bằng các token còn lại. Với biến thể “og" của “original" như hình 2, ta sẽ thực hiện 2 lần query khác nhau và chọn ra các câu trả lời tốt nhất. Nhưng như vậy có thể thấy các token chung (không có biến thể) như “show”, “copies” và “documents" sẽ bị lặp lại việc search bằng số biến thiên của các token. Điều này vô hình chung làm giảm tốc độ search đáng kể.

2.2 Tối ưu hóa truy vấn

Để tối ưu hóa truy vấn câu, ta cần hạn chế hay bỏ đi việc trùng lặp query của các token khi thực hiện search. Trong Elasticsearch có hỗ trợ cho việc đó bằng cách thực hiện tìm kiếm một lần đối với cả các token có biến thể, và thực hiện lấy max điểm của một trong các biến thể đó.

Hình 3: ví dụ về tối ưu hóa truy vấn trong Elasticsearch

Như ví dụ ở hình 3, có thể thấy thay vì 2 câu query như hình 2 thì giờ chỉ còn 1 câu query, “original" và biến thể “og" được đưa vào search cùng lúc, sau đó sẽ xem token nào trong các biến thể đạt được điểm số cao hơn khi search và sẽ thực hiện lấy token đạt điểm số cao nhất đó ra để cộng vào điểm số tổng.

Để thực hiện tối ưu hóa truy vấn như vậy trong Elasticsearch, ta sử dụng Disjunction max query (dis_max query). Đó là một loại truy vấn mà nếu một document match với nhiều mệnh đề query khác nhau thì sẽ trả về query mà đạt được điểm cao nhất khi thực hiện tìm kiếm.

3. Kết luận

Trên đây chúng ta đã đi qua về các cách truy vấn cơ bản, một truy vấn được thực hiện như nào trong Elasticsearch và cách để tối ưu hóa truy vấn đó.

Cảm ơn mọi người đã theo dõi bài viết này. Để xem thêm những kiến thức khác về công nghệ, hãy truy cập Rabiloo blogs

Nếu độc giả quan tâm đến các dịch vụ như: phát triển website, phần mềm, game, trí tuệ nhân tạo, hãy liên hệ với Rabiloo, chúng tôi luôn sẵn sàng tư vấn miễn phí mọi thắc mắc của các bạn.

 

Hẹn mọi người trong những bài viết tiếp theo.

 

Share


Cập nhật bài viết mới nhất từ chuyên gia

Không được để trống
Không được để trống
Không được để trống
Không được để trống
Tìm kiếm
Tags
Website là gì? Khái niệm, cấu tạo, phân loại các Website hiện nay
24/11/2023
21/12/2023
Website là gì? Khái niệm, cấu tạo, phân loại các Website hiện nay

Gặp gỡ và lắng nghe

Không được để trống
Không được để trống
Không được để trống
Không được để trống