Elasticsearch là một công cụ tìm kiếm và phân tích dữ liệu phân tán, theo phong cách RESTful, có khả năng giải quyết nhiều tình huống sử dụng mới xuất hiện. Là trung tâm của Elastic Stack, nó lưu trữ dữ liệu tập trung của bạn, giúp bạn phát hiện những sự kiện dự kiến và không dự kiến.
Elasticsearch được phát triển dựa trên thư viện tìm kiếm Lucene. Elasticsearch ẩn đi sự phức tạp của Lucene, cung cấp giao diện API REST / Java dễ sử dụng (ngoài ra còn có các giao diện API bằng ngôn ngữ khác).
Để tạo mới Index, bạn có thể gửi trực tiếp yêu cầu PUT đến máy chủ ES.
Cú pháp:
Ví dụ:
Máy chủ trả về một đối tượng JSON, trong đó trường acknowledged biểu thị hoạt động thành công.
Nếu bạn muốn vô hiệu hóa việc tạo tự động chỉ mục, bạn có thể thêm cấu hình sau vào config/elasticsearch.yml trong mỗi nút:
Xóa chỉ mục
Tiếp theo, chúng ta có thể gửi yêu cầu DELETE để xóa chỉ mục này.
Xóa nhiều chỉ mục
Xem chỉ mục
Bạn có thể sử dụng yêu cầu GET để xem thông tin về chỉ mục
Bí danh chỉ mục
Bí danh chỉ mục trong ES chính là tên khác mà bạn đặt cho một hoặc nhiều chỉ mục. Một ứng dụng điển hình là việc chuyển mượt mà giữa các chỉ mục.
Đầu tiên, tạo chỉ mục my_index, sau đó đặt bí danh my_alias cho nó, ví dụ như sau:
Bạn cũng có thể thực hiện như sau:
Bạn cũng có thể trong một yêu cầu thêm và xóa bí danh:
Điều cần lưu ý là nếu bí danh và chỉ mục là một-đối-một, bạn có thể sử dụng bí danh để lập chỉ mục hoặc truy vấn tài liệu. Tuy nhiên, nếu bí danh và chỉ mục là một-đối-nhiều, việc sử dụng bí danh sẽ gây ra lỗi, vì ES không biết nên viết tài liệu vào chỉ mục nào hoặc đọc tài liệu từ chỉ mục nào.
Bằng cách thêm _close hoặc _open vào POST, bạn có thể mở hoặc đóng chỉ mục.
Mở chỉ mục
Tài liệu
Tạo tài liệu
Xác định ID
Định dạng cú pháp:
Ví dụ:
Lưu ý: Xác định Id, nếu id đã tồn tại, sẽ báo lỗi
Tự động tạo ID
Khi thêm bản ghi mới, bạn cũng có thể không xác định Id, lúc này bạn cần thay đổi yêu cầu thành POST.
Định dạng cú pháp:
Ví dụ:
Xóa tài liệu
Định dạng cú pháp:
Ví dụ:
Cập nhật tài liệu
Xóa trước, sau đó viết vào
Định dạng cú pháp:
Ví dụ:
Thêm trường vào tài liệu gốc
Định dạng cú pháp:
Ví dụ:
Truy vấn tài liệu
Truy vấn theo ID cụ thể
Định dạng cú pháp:
GET /_index/_type/_id
Ví dụ:
Kết quả:
Trong dữ liệu trả về, trường found biểu thị truy vấn thành công, trường _source trả về bản gốc của bản ghi.
Nếu id không chính xác, dữ liệu sẽ không được tìm thấy, và trường found sẽ là false
Truy vấn tất cả các bản ghi
Sử dụng phương thức GET, yêu cầu trực tiếp đến /index/type/_search, tất cả các bản ghi sẽ được trả về.
Trong kết quả trả về ở trên, trường took biểu thị thời gian tiêu tốn cho thao tác này (đơn vị là mili giây), trường timed_out biểu thị liệu có quá thời gian hay không, trường hits biểu thị các bản ghi đã truy vấn được, trong đó các trường con có ý nghĩa như sau.
total: số lượng bản ghi trả về, trong trường hợp này là 2.
max_score: mức độ khớp cao nhất, trong trường hợp này là 1.0.
hits: mảng các bản ghi trả về.
Trong các bản ghi trả về, mỗi bản ghi đều có một trường _score, biểu thị mức độ khớp, mặc định là được sắp xếp theo trường này theo thứ tự giảm dần.
Tìm kiếm toàn văn
ES sử dụng cú pháp truy vấn độc đáo của chính nó, yêu cầu các yêu cầu GET đi kèm với dữ liệu.
Đoạn mã trên sử dụng Match Query, với điều kiện khớp được chỉ định là trường desc chứa từ “quản lý”. Kết quả trả về như sau.
Elastic mặc định trả về 10 kết quả mỗi lần, bạn có thể thay đổi cài đặt này thông qua trường size, và cũng có thể chỉ định vị trí thông qua trường from.
Đoạn mã trên chỉ định, bắt đầu từ vị trí 1 (mặc định là bắt đầu từ vị trí 0), chỉ trả về một kết quả.
Phép toán logic
Nếu có nhiều từ khóa tìm kiếm, Elastic coi chúng là mối quan hệ or.
Đoạn mã trên tìm kiếm phần mềm or hệ thống.
Nếu bạn muốn thực hiện tìm kiếm and với nhiều từ khóa, bạn phải sử dụng Bool Query.
Thực hiện hàng loạt
Hỗ trợ thực hiện các hoạt động trên các chỉ mục khác nhau trong một lần gọi API
Hỗ trợ bốn loại hoạt động
index
create
update
delete
Nếu một hoạt động đơn lẻ thất bại, điều này sẽ không ảnh hưởng đến các hoạt động khác.
Kết quả trả về bao gồm kết quả của từng hoạt động được thực hiện.
Lưu ý: Nếu ví dụ trên được thực hiện nhiều lần, kết quả sẽ không giống nhau.
Đọc hàng loạt
Đọc nhiều chỉ mục
Đọc một chỉ mục
Truy vấn hàng loạt
Tìm kiếm URI
Tìm kiếm URI Elasticsearch tuân theo ngữ cảnh QueryString, dạng như sau:
q chỉ định câu truy vấn, sử dụng ngữ cảnh QueryString
df là trường mặc định, nếu không chỉ định
sort sắp xếp: from và size được sử dụng cho phân trang
profile có thể xem cách thực hiện truy vấn
Term và Phrase
Beautiful Mind tương đương với Beautiful OR Mind
”Beautiful Mind” tương đương với Beautiful AND Mind
Nhóm và dấu ngoặc kép
title:(Beautiful AND Mind)
title=“Beautiful Mind”
AND, OR, NOT hoặc &&, ||, !
Chú ý: AND, OR, NOT phải viết HOA
Truy vấn phạm vi
[] biểu thị khoảng đóng
{} biểu thị khoảng mở
Ví dụ:
Ký hiệu toán học
Truy vấn dùng ký tự đại diện
? đại diện cho 1 ký tự
* đại diện cho 0 hoặc nhiều ký tự
Ví dụ:
Biểu thức chính quy
title:[bt]oy
Kết hợp mờ và truy vấn gần đúng
Ví dụ:
Request Body & DSL
Ngoài phương pháp tìm kiếm URI, Elasticsearch còn hỗ trợ việc gửi câu truy vấn thông qua Http Request Body.
Phân trang
Sắp xếp
Tốt nhất là sắp xếp trên trường dạng số hoặc ngày
Bởi vì khi sắp xếp trên trường có nhiều giá trị hoặc đã được phân tích, hệ thống sẽ chọn một giá trị, không thể biết giá trị đó là gì
Lọc _source
Nếu _source không được lưu trữ, thì chỉ trả về metadata của các tài liệu khớp
_source hỗ trợ sử dụng ký tự đại diện, ví dụ: _source["name*", "desc*"]
Một số API cấp cluster có thể được thực thi trên một tập con của các node, những node này có thể được chỉ định bằng bộ lọc node. Ví dụ, các API quản lý task, thống kê node và thông tin node đều có thể báo cáo kết quả từ một nhóm các node đã lọc thay vì tất cả các node.
Bộ lọc node được viết dưới dạng danh sách bộ lọc đơn lẻ được phân tách bằng dấu phẩy, mỗi bộ lọc thêm hoặc loại bỏ các node từ tập con đã chọn. Mỗi bộ lọc có thể là một trong những điều sau:
_all: thêm tất cả các node vào tập con
_local: thêm node cục bộ vào tập con
_master: thêm node master hiện tại vào tập con
Thêm các node khớp theo ID node hoặc tên node vào tập con
Thêm các node khớp theo địa chỉ IP hoặc tên máy chủ vào tập con
Sử dụng ký tự đại diện, thêm các node có tên, tên địa chỉ hoặc tên máy chủ khớp vào tập con
master:true, data:true, ingest:true, voting_only:true, ml:true hoặc coordinating_only:true, tương ứng có nghĩa là thêm tất cả các node master, tất cả các node dữ liệu, tất cả các node ingest, tất cả các node chỉ bỏ phiếu, tất cả các node machine learning và tất cả các node điều phối vào tập con.
master:false, data:false, ingest:false, voting_only:true, ml:false hoặc coordinating_only:false, tương ứng có nghĩa là loại trừ tất cả các node master, tất cả các node dữ liệu, tất cả các node ingest, tất cả các node chỉ bỏ phiếu, tất cả các node machine learning và tất cả các node điều phối ra khỏi tập con.
Mô hình ghép cặp, sử dụng ký tự đại diện *, theo dạng attrname:attrvalue, thêm tất cả các node có thuộc tính node tùy chỉnh vào tập con, tên và giá trị của nó khớp với mô hình tương ứng. Thuộc tính node tùy chỉnh được thiết lập trong tệp cấu hình theo dạng node.attr.attrname: attrvalue.
Cluster Health API
Cluster State API
Cluster State API trả về metadata biểu thị trạng thái toàn bộ cluster.
Elasticsearch Official cat Shards API - Lệnh shards cung cấp một cái nhìn chi tiết về shard nào thuộc về node nào. Nó sẽ cho bạn biết nó là primary hay replica, số lượng tài liệu, số byte mà nó chiếm trên đĩa và node mà nó đang nằm trên.
Monitoring API
Trong Elasticsearch, các thông tin liên quan đến sức khỏe, thống kê, v.v. của cluster đều xoay quanh cat API.
Bằng cách gửi yêu cầu GET đến cat, dưới đây là tất cả các API có sẵn: