[Elasticsearch - CLI] Tìm Kiếm Trong Elasticsearch
Chúng ta đã học cách tạo indices, định nghĩa mapping types, và thêm documents. Nhưng phần thực sự quan trọng và thú vị nhất của Elasticsearch chính là search! Bây giờ, chúng ta sẽ tìm hiểu về cách thực hiện tìm kiếm trong Elasticsearch.
Trước tiên, để thử nghiệm các tính năng tìm kiếm khác nhau, hãy tải thêm dữ liệu vào Elasticsearch cluster từ tệp books-and-authors-bulk.json
bằng Bulk Document API:
$ http POST https://localhost:9200/_bulk < books-and-authors-bulk.json
Tìm Kiếm Đơn Giản Bằng Query String
Khi đã có dữ liệu, chúng ta có thể bắt đầu thực hiện truy vấn tìm kiếm bằng cách sử dụng Search API với tham số truy vấn được gửi qua query string trên URI.
Ví dụ, nếu chúng ta muốn tìm kiếm từ khóa "engine"
(liên quan đến cụm từ search engine), chúng ta có thể thực hiện:
$ http POST https://localhost:9200/catalog/books/_search?q=engine
Kết quả trả về (rút gọn)
{
"_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
}
Đây là một khởi đầu tuyệt vời! Query String Search API rất tiện lợi khi thực hiện các tìm kiếm nhanh chóng, nhưng nó có những hạn chế đáng kể. Nếu chúng ta muốn thực hiện các truy vấn nâng cao hơn, Request Body Search API sẽ là 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 trong query string, chúng ta có thể sử dụng JSON-based Query DSL, giúp 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 có cú pháp và tham số riêng. Tuy nhiên, có một số tham số chung mà chúng ta có thể sử dụng trong hầu hết các truy vấn, chẳng hạn như:
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ố kết quả trả vềstored_fields
: Chỉ định các trường cần lấy về
Dưới đây là một truy vấn đơn giản sử dụng match_all query, tìm kiế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ề (rút gọn)
{
"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"
}
}
]
}
}
Tuy match_all query không lọc dữ liệu, nhưng nó hữu ích để kiểm tra số lượng tài liệu trong một index.
Vậy là chúng ta đã có cái nhìn tổng quan về cách thực hiện tìm kiếm trong Elasticsearch. Trong các phần tiếp theo, chúng ta sẽ đi sâu hơn vào Query DSL, tìm hiểu cách sử dụng các loại query nâng cao để có kết quả tìm kiếm chính xác hơn! 🚀
All rights reserved