2013-04-11 37 views
8

Tôi mới sử dụng ElasticSearch, vì vậy đây có thể là điều khá tầm thường, nhưng tôi đã không tìm ra điều gì tốt hơn là tìm nạp mọi thứ, xử lý bằng tập lệnh và cập nhật từng đăng ký .Cập nhật một trường trong tất cả các bản ghi trong elasticsearch

Tôi muốn làm một cái gì đó giống như một bản cập nhật SQL đơn giản:

UPDATE RECORD SET SOMEFIELD = SOMEXPRESSION 

Mục đích của tôi là để thay thế các dữ liệu giả mạo thực tế với một số dữ liệu có ý nghĩa hơn (vì vậy các biểu hiện về cơ bản là lựa chọn ngẫu nhiên từ một vũng giá trị hợp lệ).

Trả lời

14

Có một vài số openissues về việc có thể cập nhật tài liệu theo truy vấn.

Thách thức kỹ thuật là lucene (thư viện công cụ tìm kiếm văn bản mà elasticsearch sử dụng dưới mui xe) phân đoạn chỉ đọc. Bạn không bao giờ có thể sửa đổi tài liệu hiện có. Những gì bạn cần làm là xóa phiên bản cũ của tài liệu (mà bằng cách này sẽ chỉ được đánh dấu là đã xóa cho đến khi một phân đoạn hợp nhất xảy ra) và lập chỉ mục mới. Đó là những gì hiện tại update api. Do đó, bản cập nhật theo truy vấn có thể mất nhiều thời gian và dẫn đến sự cố, đó là lý do tại sao nó chưa được phát hành. Một cơ chế cho phép ngắt các truy vấn đang chạy sẽ là một điều tốt đẹp để có quá cho trường hợp này.

Nhưng có update by query plugin hiển thị chính xác tính năng đó. Hãy cẩn thận với những rủi ro tiềm ẩn trước khi sử dụng nó.

+1

Sau khi một số nghiên cứu là kết luận mà tôi đã vẽ ... Đôi khi tôi không thể hiểu được tất cả các quảng cáo xung quanh NoSQL: ( – fortran

+0

Đó là thêm về lucene hơn NoSQL ở đây. Lucene không cập nhật, chỉ reindexes ... do đó bạn tốt hơn reindex chính mình :) Tôi có thể yêu cầu chấp nhận câu trả lời nếu nó hữu ích không? – javanna

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