2014-11-19 22 views
11

Tôi cần cập nhật elasticsearch loại trường số nguyên dài Tôi đã thử các cách sau đây và nó không làm việcLàm thế nào để cập nhật elasticsearch loại lĩnh vực

curl -XPUT 'http://localhost:9200/testwork/_mapping/message?ignore_conflicts=true' -d ' 
{ 
    "message" : { 
     "properties" : { 
      "status" : {"type" : "long"} 
     } 
    } 
} 
' 

Khi cố gắng mà không ignore_conflicts tham số nó nhận được lỗi như

{"error":"MergeMappingException[Merge failed with failures {[mapper [status] of different type, current_type [integer], merged_type [long]]}]","status":400} 

Nhưng không gặp lỗi trong khi sử dụng tham số ignore_conflicts nhận được phản hồi như

{"acknowledged":true} 

Nhưng loại không thay đổi cho trường trạng thái. Hãy giúp tôi làm điều này

Trả lời

14

Không thể thay đổi loại dữ liệu nếu bạn có dữ liệu.

Bạn sẽ phải xóa chỉ mục của mình, tạo ánh xạ với loại dữ liệu bạn muốn và lập chỉ mục lại dữ liệu của bạn.


Để tái lập chỉ mục, bạn sẽ cần để xuất khẩu và tái nhập dữ liệu của bạn - có một số công cụ (quét & cuộn và API số lượng lớn) để làm điều này dễ dàng hơn, xem reindexing your data.

Cách khác là tạo chỉ mục mới và sau đó sử dụng aliasing - tức là khi thực hiện chèn ghi vào chỉ mục mới nhất (có thể sử dụng bí danh có chỉ mục duy nhất trong đó), nhưng khi thực hiện truy vấn, hãy đọc từ bí danh bao gồm tất cả các chỉ mục có liên quan (phiên bản mới và cũ của chỉ mục).

+0

Cảm ơn bạn đã phản hồi nhanh chóng. Làm thế nào tôi có thể sao lưu dữ liệu hiện có? vì vậy tôi có thể khôi phục dữ liệu sao lưu sau khi lập chỉ mục lại bộ sưu tập. – Dibish

+0

Tôi đã thêm một số thông tin khác vào Câu trả lời. –

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