2013-04-30 8 views
27

Tài liệu ElasticSearch không rõ ràng về cách thực hiện việc này.Cách cập nhật loại trường trong elasticsearch

Tôi đã lập chỉ mục một số tweet và một trong các trường, created_at, được lập chỉ mục dưới dạng chuỗi thay vì ngày. Tôi không thể tìm cách liên kết lại với thay đổi này thông qua cuộc gọi curl. Nếu reindexing là một quá trình phức tạp, sau đó tôi sẽ thay vì chỉ xóa những gì có và bắt đầu lại. Nhưng, tôi không thể tìm cách chỉ định các loại trường nào!

Bất kỳ trợ giúp nào được đánh giá cao.

Trả lời

23

Bạn cần phải xác định một ánh xạ sử dụng Put Mapping AP I.

$ curl -XPUT 'http://localhost:9200/twitter/tweet/_mapping' -d ' 
{ 
    "tweet" : { 
     "properties" : { 
      "message" : {"type" : "string", "store" : "yes"} 
     } 
    } 
} 
' 

Một ngày có thể được định nghĩa như sau:

{ 
    "tweet" : { 
     "properties" : { 
      "user" : {"type" : "string", "index" : "not_analyzed"}, 
      "message" : {"type" : "string", "null_value" : "na"}, 
      "postDate" : {"type" : "date"}, 
      "priority" : {"type" : "integer"}, 
      "rank" : {"type" : "float"} 
     } 
    } 
} 
+0

Yep, đó là nó. Cảm ơn bạn dadoonet. – maximus

+0

@dadoonet Bất kỳ cách nào để thay đổi loại "tin nhắn" thay đổi loại từ chuỗi thành "dài" .Merge thất bại với thất bại {[mapper [message] của loại khác nhau, current_type [string] – Dibish

+1

@dibish No. Bạn cần phải reindex. – dadoonet

8

Bạn cũng cần phải xác định định dạng không chỉ cần gõ nếu bạn đang chèn một dấu thời gian mysql sau đó bạn chỉ cần thêm một định dạng cho nó như thế này.

"properties": { 
    "updated_at": { 
     "type": "date", 
     "format": "yyyy-MM-dd HH:mm:ss" 
    } 
} 

Nếu chúng ta xem xét ví dụ của bạn sau đó nó nên được như thế

"tweet" : { 
    "properties" : { 
     "user" : {"type" : "string", "index" : "not_analyzed"}, 
     "message" : {"type" : "string", "null_value" : "na"}, 
     "postDate" : {"type" : "date" , "format": "yyyy-MM-dd HH:mm:ss" }, 
     "priority" : {"type" : "integer"}, 
     "rank" : {"type" : "float"} 
    } 
}