Hướng Dẫn Tìm Kiếm Hiệu Quả Trong Elasticsearch
Chúng ta đã tìm hiểu về cách tạo indices, xác định mapping types, và thêm documents. Tuy nhiên, phần quan trọng và thú vị nhất của Elasticsearch chính là khả năng tìm kiếm. Trong bài viết này, chúng ta sẽ khám phá cách thực hiện tìm kiếm hiệu quả trong Elasticsearch.
Nhập Dữ Liệu Vào Elasticsearch
Trước khi bắt đầu, hãy đảm bảo rằng bạn đã có dữ liệu trong cluster của bạn. Bạn có thể tải thêm dữ liệu bằng Bulk Document API từ tệp books-and-authors-bulk.json
:
$ http POST https://localhost:9200/_bulk < books-and-authors-bulk.json
Tìm Kiếm Đơn Giản Với Query String
Khi đã có dữ liệu, chúng ta có thể thực hiện các truy vấn tìm kiếm cơ bản bằng cách sử dụng Search API. Bạn có thể gửi tham số truy vấn qua query string trên URI.
Ví dụ, nếu bạn muốn tìm kiếm từ khóa "engine" (liên quan đến cụm từ search engine), bạn có thể thực hiện truy vấn sau:
$ http POST https://localhost:9200/catalog/books/_search?q=engine
Kết Quả Trả Về
Dưới đây là kết quả rút gọn mà bạn có thể nhận được:
{
"_shards": {
"failed": 0,
"successful": 5,
"total": 5
},
"hits": {
"total": 1,
"max_score": 0.7503276,
"hits": [
{
"_index": "catalog",
"_type": "books",
"_id": "978-1449358549",
"_score": 0.7503276,
"_source": {
"title": "Elasticsearch: The Definitive Guide.",
"categories": [
{ "name": "analytics" },
{ "name": "search" },
{ "name": "database store" }
],
"publisher": "O’Reilly",
"published_date": "2015-02-07",
"isbn": "978-1449358549",
"rating": 4
}
}
]
},
"timed_out": false,
"took": 22
}
Query String Search API rất tiện lợi cho các tìm kiếm nhanh chóng, nhưng có những hạn chế nếu bạn cần thực hiện các truy vấn nâng cao hơn. Đó là lý do Request Body Search API trở thành một lựa chọn mạnh mẽ hơn.
Tìm Kiếm Bằng Request Body Search API
Thay vì gửi truy vấn qua query string, bạn có thể sử dụng JSON-based Query DSL để xây dựng các truy vấn phức tạp một cách dễ dàng hơn. Có rất nhiều loại query mà Query DSL hỗ trợ, mỗi loại đều có cú pháp và tham số riêng. Một số tham số quan trọng mà bạn có thể sử dụng bao gồm:
sort
: Sắp xếp kết quảfrom
: Bỏ qua một số kết quả đầu tiênsize
: Giới hạn số lượng kết quả trả vềstored_fields
: Chỉ định các trường cần lấy về
Ví Dụ Về Query
Dưới đây là một truy vấn đơn giản sử dụng match_all query, cho phép bạn tìm tất cả các tài liệu trong books index:
$ curl -i https://localhost:9200/catalog/books/_search?pretty -d '
{
"size": 10,
"query": {
"match_all": {}
}
}'
Kết Quả Trả Về
Kết quả trả về có thể hiện như sau:
{
"took": 13,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 3,
"max_score": 1.0,
"hits": [
{
"_index": "catalog",
"_type": "books",
"_id": "978-1449358549",
"_score": 1.0,
"_source": {
"title": "Elasticsearch: The Definitive Guide.",
"publisher": "O’Reilly"
}
}
]
}
}
match_all query không lọc các tài liệu, nhưng nó rất hữu ích khi bạn muốn kiểm tra số lượng tài liệu trong một index.
Kết Luận
Trong bài viết này, bạn đã có cái nhìn tổng quan về cách thực hiện tìm kiếm hiệu quả trong Elasticsearch. Ở các phần tiếp theo, chúng ta sẽ khám phá sâu hơn về Query DSL và học cách sử dụng các loại query nâng cao giúp tăng cường độ chính xác của kết quả tìm kiếm. Hãy theo dõi để không bỏ lỡ những thông tin hữu ích này! 🚀