Bài viết này đã được đưa vào Github. Bạn nên đọc Ghi chú ngẫu nhiên về Java.
Tài khoản công khai WeChat: Java Capriccio.
Xem trước rồi thích, tạo thành thói quen. Hãy like và sưu tầm, cuộc sống sẽ rực rỡ.
- Truy vấn hàng loạt dựa trên mget
- Thêm, xóa và sửa đổi hàng loạt dựa trên số lượng lớn
- đường dẫn lọc
Elaticsearch cung cấp API _mget và _bulk để thực hiện các thao tác hàng loạt, cho phép bạn thực hiện nhiều thao tác lấy/xóa/cập nhật/tạo chỉ mục trong một yêu cầu HTTP. Cách tiếp cận này hiệu quả hơn việc gửi một số lượng lớn các yêu cầu riêng lẻ.
Truy vấn hàng loạt dựa trên mget
mget (truy xuất nhiều tài liệu) là một API được cung cấp trong Elaticsearch, được sử dụng để truy xuất nhiều tài liệu từ cùng một chỉ mục hoặc các chỉ mục khác nhau cùng một lúc.
Ví dụ 1:
Sau đây là một ví dụ về hoạt động mget (thu thập nhiều tài liệu) của Elaticsearch. Trong ví dụ này, chúng tôi sẽ nhận được nhiều tài liệu có ID cụ thể trong chỉ mục test-index.
NHẬN /test-index/_mget { "id": ["1", "2"] }
Trong yêu cầu trên, chúng tôi nhận được tài liệu có ID "1" và "2".
Ví dụ 2:
Bạn cũng có thể lấy tài liệu ở các chỉ mục khác nhau bằng cách chỉ định _index và _id của từng tài liệu:
NHẬN /_mget { "docs": [ { "_index": "chỉ mục kiểm tra", "_id": "1" }, { "_index": "chỉ mục khác", "_id": "2" } ] }
Trong yêu cầu này, chúng tôi nhận được tài liệu có ID "1" từ chỉ mục "chỉ mục kiểm tra" và tài liệu có ID "2" từ chỉ mục "chỉ mục khác".
Ví dụ ba:
Trong ví dụ về Elaticsearch mget (tìm nạp nhiều tài liệu) sau đây, chúng tôi sẽ tìm nạp tài liệu từ hai chỉ mục khác nhau và chỉ trả về các trường cụ thể:
NHẬN /_mget { "docs": [ { "_index": "test-index-1", "_id": "1", "_source": ["field1", "field2"] }, { "_index": "test-index-2", "_id": "2", "_source": "field3" } ] }
Trong yêu cầu này, chúng tôi nhận được tài liệu có ID "1" từ chỉ mục "test-index-1" và chỉ trả về các trường "field1" và "field2". Đồng thời, chúng tôi lấy tài liệu có ID "2" từ chỉ mục "test-index-2" và chỉ trả về trường "field3".
Lọc nguồn (_source) có thể được sử dụng để giới hạn các trường được trả về. Bạn có thể cung cấp danh sách các trường hoặc một trường duy nhất. Lưu ý rằng nếu trường bạn yêu cầu không tồn tại, nó sẽ không xuất hiện trong phản hồi.
Thêm, xóa và sửa đổi hàng loạt dựa trên số lượng lớn
Định dạng cơ bản của số lượng lớn như sau:
POST //_bulk {"hành động": {"siêu dữ liệu"}} {"dữ liệu"}
Api số lượng lớn có các yêu cầu nghiêm ngặt về cú pháp json. Ngoại trừ việc xóa, mỗi thao tác yêu cầu hai chuỗi json (siêu dữ liệu và dữ liệu doanh nghiệp) và mỗi chuỗi json không thể được ngắt dòng. một lỗi.
Trong các hoạt động hàng loạt, nếu bất kỳ hoạt động nào không thành công, nó sẽ không ảnh hưởng đến các hoạt động khác, nhưng nhật ký ngoại lệ sẽ được thông báo trong kết quả trả về.
Tăng
POST /_bulk { "create" : { "_index" : "product2", "_id" : "2" } } { "field1" : "value1", "field2" : "value2" }
Trong yêu cầu này, chúng tôi tạo một tài liệu mới có ID "2" trong chỉ mục "product2" và chứa hai trường "field1" và "field2".
Lưu ý rằng thao tác này bao gồm hai hàng: hàng đầu tiên chứa loại thao tác ("tạo" trong ví dụ này) và hàng thứ hai chứa dữ liệu tài liệu thực tế sẽ được tạo hoặc lập chỉ mục.
xóa bỏ
Để xóa tài liệu, ES sử dụng cơ chế xóa lười để xóa tài liệu, tức là đánh dấu xóa (nguyên tắc xóa lười).
POST /_bulk { "xóa" : { "_index" : "chỉ mục kiểm tra", "_id" : "1" } } { "xóa" : { "_index" : "chỉ mục kiểm tra", "_id" : "2" } }
Trong yêu cầu này, chúng tôi đã xóa hai tài liệu có ID "1" và "2" khỏi chỉ mục "test-index".
Lưu ý rằng mỗi thao tác xóa chỉ bao gồm một hàng, chứa loại thao tác ("xóa" trong ví dụ này) và siêu dữ liệu.
Ôn lại
POST /_bulk { "cập nhật" : { "_index" : "test-index", "_id" : "1" } } { "doc" : { "field1" : "new_value1", "field2" : "new_value2" }} { "cập nhật" : { "_index" : "test-index", "_id" : "2" } } { "doc" : { "field1" : "new_value3", "field2" : "new_value4" }}
Trong yêu cầu này, chúng tôi đã cập nhật hai tài liệu trong chỉ mục "test-index":
- Chúng tôi đã cập nhật tài liệu có ID "1" và đặt giá trị của trường "field1" và "field2" thành "new_value1" và "new_value2".
- Chúng tôi cũng đã cập nhật tài liệu có ID "2", đặt giá trị của trường "field1" và "field2" thành "new_value3" và "new_value4".
đường dẫn lọc
Trong Elaticsearch, tham số filter_path được sử dụng để lọc nội dung phản hồi được trả về và có thể được sử dụng để giảm lượng dữ liệu được Elaticsearch trả về. Khi bạn chỉ định một hoặc nhiều đường dẫn, đối tượng JSON được trả về sẽ chỉ chứa các khóa trong các đường dẫn này. Nó chấp nhận một danh sách được phân tách bằng dấu phẩy chứa các đường dẫn trong đối tượng JSON mà bạn muốn trả về. Tham số này hỗ trợ khớp ký tự đại diện ( * ) và khớp phần tử mảng ( [] ). Ví dụ:
POST /_bulk?filter_path=items.*.error
Filter_path=items.*.error trong yêu cầu trên sẽ khiến Elaticsearch chỉ trả về thông tin lỗi trong kết quả lệnh gọi API _bulk. items.*.error Đường dẫn này cho biết rằng trong phản hồi được trả về, tất cả các mục có trường lỗi đều được khớp.
Có hai lợi ích chính khi làm điều này:
- Nó có thể cải thiện hiệu suất của Elaticsearch vì ít dữ liệu hơn đồng nghĩa với việc tuần tự hóa và giải tuần tự hóa nhanh hơn.
- Nó giúp bạn tập trung vào những phần quan tâm mà không phải xử lý những dữ liệu không liên quan.
Lưu ý rằng * là ký tự đại diện và đại diện cho bất kỳ giá trị nào.
Dưới đây là một số ví dụ về filter_path khác:
-
filter_path=đã lấy
: Yêu cầu này chỉ trả về thời gian (tính bằng mili giây) cần thiết để thực hiện yêu cầu.
-
filter_path=items._id,items._index
: Yêu cầu này chỉ trả về _nhận dạng
Và _chỉ mục
cánh đồng.
-
filter_path=items.*.lỗi
: Yêu cầu này sẽ trả về tất cả các mục có chứa lỗi
Các mặt hàng của lĩnh vực này.
-
filter_path=lượt truy cập.lượt truy cập._nguồn
: Yêu cầu này chỉ trả về nội dung tài liệu gốc từ kết quả tìm kiếm.
-
filter_path=_shards, hits.total
: Yêu cầu này trả về thông tin về mảnh vỡ
thông tin và tổng số lượt truy cập.
-
filter_path=tổng hợp.*.giá trị
: Yêu cầu này chỉ trả về các giá trị cho mỗi tổng hợp.
Xin lưu ý rằng nếu bạn chỉ định nhiều trường trong filter_path, bạn cần phân tách chúng bằng dấu phẩy.
Đó là tất cả cho bài viết này. Cảm ơn bạn đã đọc. Nếu có bất kỳ sai sót hoặc đề xuất nào trong blog này, vui lòng để lại tin nhắn để tôi sửa chữa.
Có lợi ích gì không? Mong rằng Lão Thiết sẽ nghĩ ra bài viết này và để nhiều bạn sinh viên xem bài viết này và truyền cảm hứng cho mình nhé, hehe.
Các cựu chiến binh hãy theo dõi tài khoản công khai WeChat của tôi "Java Capriccio", tài khoản này tập trung vào công nghệ chia sẻ. Các bài viết được cập nhật liên tục. Bạn có thể theo dõi tài khoản công khai để đọc trong thời gian sớm nhất.
Một người có thể đi nhanh nhưng một nhóm người có thể đi xa hơn. Hãy theo dõi tôi, cùng học hỏi và cùng phát triển! .
Cuối cùng, bài viết này về việc tìm hiểu hoạt động hàng loạt của chỉ mục chuỗi Elaticsearch có ở đây. Nếu bạn muốn biết thêm về việc tìm hiểu hoạt động hàng loạt của chỉ mục chuỗi Elaticsearch, vui lòng tìm kiếm bài viết CFSDN hoặc tiếp tục duyệt qua các bài viết liên quan. tất cả các bạn hãy ủng hộ blog của tôi trong tương lai! .
Tôi là một lập trình viên xuất sắc, rất giỏi!