2014-08-31 22 views
5

Có phương pháp nào trên elasticsearch hoàn toàn (không phải một phần) cập nhật tài liệu và không tạo tài liệu mới trong trường hợp nó chưa tồn tại?Hoàn toàn cập nhật tài liệu mà không cần tạo nếu không tồn tại

Cho đến bây giờ, tôi thấy rằng phương pháp _update, trong khi chuyển thuộc tính doc bên trong phần thân yêu cầu json để cập nhật một phần tài liệu, tuy nhiên, tôi muốn thay thế toàn bộ tài liệu trong trường hợp này.

Tôi cũng thấy rằng, phương pháp index, khi gửi yêu cầu PUT hoạt động tốt, mặc dù tạo tài liệu mới trong trường hợp id chưa được lập chỉ mục.

Đặt tham số op_type thành create sẽ thực thi việc tạo tài liệu thay vì cập nhật. Tôi đã tự hỏi nếu có cách nào để luôn luôn thực thi update và không bao giờ create một cái mới?

Hoặc có lẽ có phương pháp nào khác có thể cho phép tôi đạt được nhiệm vụ đó không?

Trả lời

0

Nếu tôi hiểu chính xác, bạn muốn lập chỉ mục một tài liệu, nhưng chỉ khi nó đã tồn tại? Giống như tùy chọn op_type của update?

Bạn chủ yếu có thể làm điều đó với API cập nhật, do bản đồ của bạn vẫn nhất quán. Với số _update, nếu tài liệu không tồn tại, bạn sẽ nhận được 404. Nếu nó tồn tại, ES sẽ hợp nhất nội dung của doc với bất kỳ tài liệu nào tồn tại ở đó. Nếu bạn đảm bảo rằng bạn đang gửi qua một tài liệu mới với tất cả các trường trong ánh xạ, thì bạn đang thay thế nó một cách hiệu quả.

Lưu ý, tuy nhiên, bạn có thể làm điều đó mà không cần hợp nhất tài liệu khá hiệu quả trong hai yêu cầu; người đầu tiên kiểm tra sự tồn tại của tài liệu với yêu cầu HEAD. Nếu HEAD /idx/type/id thành công, hãy thực hiện PUT. Đây là cơ bản những gì đang xảy ra trong nội bộ anyway với API cập nhật, với một chi phí thêm một chút. Nhưng HEAD thực sự rẻ vì nó không xáo trộn bất kỳ tải trọng nào. Nó chỉ trả về một HTTP 200/404.

+0

âm thanh tốt Drew, HEAD, như bạn đã nói là thực sự hiệu quả trong các điều khoản này. Cảm ơn bạn đã giúp đỡ. – zanona

Các vấn đề liên quan