2012-12-06 23 views
8

Tôi đã cố xác định thuộc tính _timestamp trên chỉ mục. Vì vậy, đầu tiên, tôi tạo ra các chỉ sốElasticsearch _timestamp

curl -XPUT 'http://elasticsearch:9200/ppe/'

phản hồi từ máy chủ: {"ok":true,"acknowledged":true}

sau đó tôi đã cố gắng để xác định việc lập bản đồ với một _timestamp

curl -Xput 'http://elasticsearch:9200/ppe/log/_mapping' -d '{ 
    "log": { 
    "properties": { 
     "_ttl": { 
     "enabled": true 
     }, 
     "_timestamp": { 
     "enabled": true, 
     "store": "yes" 
     }, 
     "message": { 
     "type": "string", 
     "store": "yes" 
     }, 
     "appid": { 
     "type": "string", 
     "store": "yes" 
     }, 
     "level": { 
     "type": "integer", 
     "store": "yes" 
     }, 
     "logdate": { 
     "type": "date", 
     "format": "date_time_no_millis", 
     "store": "yes" 
     } 
    } 
    } 
}' 

và tôi nhận được là câu trả lời từ máy chủ

{ 
    "error": "MapperParsingException[No type specified for property [_timestamp]]", 
    "status": 400 
} 

Có gì sai với ánh xạ của tôi?

Trả lời

16

lĩnh vực đặc biệt như _ttl_timestamp đã được xác định theo mức độ tương tự như properties đối tượng:

curl -Xput 'http://elasticsearch:9200/ppe/log/_mapping' -d '{ 
    "log": { 
     "_ttl": { 
      "enabled": true 
     }, 
     "_timestamp": { 
      "enabled": true, 
      "store": "yes" 
     }, 
     "properties": { 
      "message": { 
       "type": "string", 
       "store": "yes" 
      }, 
      "appid": { 
       "type": "string", 
       "store": "yes" 
      }, 
      "level": { 
       "type": "integer", 
       "store": "yes" 
      }, 
      "logdate": { 
       "type": "date", 
       "format": "date_time_no_millis", 
       "store": "yes" 
      } 
     } 
    } 
} 
' 
3

Lưu ý rằng mặc dù mặc dù _timestamp được định nghĩa trên cấp cao nhất sẽ được trả lại bên fields:

curl 'http://localhost:9200/myindex/mytype/AUqL0PW7YDMmKSIKO1bk?pretty=true&fields=_timestamp' 
{ 
    "_index" : "myindex", 
    "_type" : "mytype", 
    "_id" : "AUqL0PW7YDMmKSIKO1bk", 
    "_version" : 1, 
    "found" : true, 
    "fields" : { 
    "_timestamp" : 1419684935099 
    } 
} 

Lưu ý rằng _timestamp phải được yêu cầu rõ ràng bởi fields=_timestamp hoặc fields=_timestamp,_source.

Lưu ý rằng _timestamp chỉ có thể được trả lại khi trường này được đánh dấu là 'store': true. Nhưng có một cách để truy cập giá trị này khi sắp xếp bởi _timestamp, như thế này:

curl 'http://localhost:9200/myindex/mytype/_search?pretty=true' -d ' 
    { "sort": [ "_timestamp" ], "size": 1} 
' 

Cung cấp kết quả:

{ 
    "took" : 1, 
    "timed_out" : false, 
    "_shards" : { 
    "total" : 5, 
    "successful" : 5, 
    "failed" : 0 
    }, 
    "hits" : { 
    "total" : 3, 
    "max_score" : null, 
    "hits" : [ { 
     "_index" : "myindex", 
     "_type" : "mytype", 
     "_id" : "AUqL0PDXYDMmKSIKO1bj", 
     "_score" : null, 
     "sort" : [ 1419684933847 ] 
    } ] 
    } 
} 

Và bây giờ sort[0] là giá trị đầu tiên (và duy nhất trong trường hợp này) giá trị sắp xếp: _timestamp. _timestamp không cần phải được đánh dấu là "store": true khi được sử dụng theo cách này.

+0

Tôi đã suy nghĩ trong một thời gian dài rằng cài đặt '_timestamp' của tôi trên chỉ mục không chính xác hoặc vì tài liệu của tôi không quay lại với trường này. Cảm ơn bạn đã ghi chú "Lưu ý rằng '_timestamp' phải được yêu cầu một cách rõ ràng bởi 'fields = _timestamp' hoặc 'fields = _timestamp, _source'.", Điều này thực sự đã giúp tôi! –

+0

@ JesseWebb: bạn được chào đón! –

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