2013-08-27 25 views
7

Ok, trong elastisearch của tôi, tôi đang sử dụng các bản đồ sau đây cho một chỉ số:Cách xác định ánh xạ trong elasticsearch không chấp nhận các trường khác mà các ánh xạ được ánh xạ?

{ 

    "mappings": { 
     "mytype": { 
      "type":"object", 
      "dynamic" : "false", 
      "properties": { 
       "name": { 
        "type": "string" 
       }, 
       "address": { 
        "type": "string" 
       }, 
       "published": { 
        "type": "date" 
       } 

      } 
     } 
    } 
} 

nó hoạt động. Trong thực tế, nếu tôi đặt một ngày không đúng định dạng trong lĩnh vực "xuất bản" nó than phiền và thất bại. Ngoài ra tôi có cấu hình sau:

... 
node.name : node1 
index.mapper.dynamic : false 
index.mapper.dynamic.strict : true 
... 

Và không có ánh xạ, tôi thực sự không thể sử dụng loại. Vấn đề là nếu tôi chèn một cái gì đó như:

{ "tên": "boh58585", "địa chỉ": "hiohio", "xuất bản": "2014/04/04", "test" : "hophiophop" }

nó sẽ vui vẻ chấp nhận nó. Đó không phải là hành vi mà tôi mong đợi, bởi vì trường test không có trong ánh xạ. Làm thế nào tôi có thể hạn chế các lĩnh vực của tài liệu để chỉ những người có trong bản đồ?

Trả lời

10

Việc sử dụng "dynamic": false yêu cầu Elasticsearch không bao giờ cho phép ánh xạ chỉ mục bị thay đổi. Nếu bạn muốn phát hiện lỗi khi cố gắng lập chỉ mục các tài liệu mới với các trường bên ngoài ánh xạ đã xác định, hãy sử dụng "dynamic": "strict" để thay thế.

Từ tài liệu: "Tham số động cũng có thể được đặt thành nghiêm ngặt, có nghĩa là không chỉ các trường mới sẽ không được đưa vào các tài liệu ánh xạ, phân tích cú pháp (lập chỉ mục) với các trường mới sẽ không thành công".

Vì bạn đã xác định điều này trong cài đặt, tôi cho rằng việc bỏ ra khỏi dynamic từ định nghĩa ánh xạ hoàn toàn sẽ mặc định là "dynamic": "strict".