2014-12-02 119 views
10

有沒有一種方法可以從ElasticSearch信息中檢索特定索引上次更新的時間? 我的目標是能夠分辨索引中何時最後一次插入/更新/刪除任何文檔。如果這是不可能的,有什麼我可以添加在我的索引修改請求,稍後將提供此信息?Elasticsearch索引上次更新時間

回答

7

你可以從_timestamp

修改時間要更容易地回報你可以設置Elasticsearch存儲它的時間戳:如果我插入一個文檔,然後查詢上

curl -XPUT "http://localhost:9200/myindex/mytype/_mapping" -d' 
{ 
    "mytype": { 
     "_timestamp": { 
      "enabled": "true", 
      "store": "yes" 
     } 
    } 
}' 

我得到它的時間戳:

curl -XGET 'http://localhost:9200/myindex/mytype/_search?pretty' -d '{ 
> fields : ["_timestamp"], 
> "query": { 
>  "query_string": { "query":"*"} 
> } 
> }' 
{ 
    "took" : 7, 
    "timed_out" : false, 
    "_shards" : { 
    "total" : 5, 
    "successful" : 5, 
    "failed" : 0 
    }, 
    "hits" : { 
    "total" : 1, 
    "max_score" : 1.0, 
    "hits" : [ { 
     "_index" : "myindex", 
     "_type" : "mytype", 
     "_id" : "1", 
     "_score" : 1.0, 
     "fields" : { 
     "_timestamp" : 1417599223918 
     } 
    } ] 
    } 
} 

更新現有的文件:

curl -XPOST "http://localhost:9200/myindex/mytype/1/_update" -d' 
{ 
    "doc" : { 
     "field1": "data", 
     "field2": "more data" 
    }, 
    "doc_as_upsert" : true 
}' 

重新運行前面的查詢顯示我更新的時間戳:

"fields" : { 
    "_timestamp" : 1417599620167 
    } 
+0

謝謝奧利。我試過這個,確實時間戳與文檔一起更新。但這只是我需要的一半,因爲我想獲取最近更新的文檔的時間戳。有沒有簡單的方法來做到這一點,或者我必須對所有具有排序時間戳的文檔進行查詢並獲得最佳結果?另外,如果從索引中刪除一個文檔,那麼將不會有時間戳來表明某些內容已更改,是否正確? – dchar 2014-12-03 11:28:24

+1

我會做一個聚合,返回max _timestamp。如果您也需要該文檔,則可以運行使用時間戳記的第二個搜索。你在第二點是正確的,如果文件被刪除,你將無法搜索它。 – 2014-12-03 14:25:39

+0

我只需要時間戳。使用最大的聚合它像一個魅力工作。感謝您的幫助! – dchar 2014-12-04 08:52:36

0

我不知道還有誰正在尋找一個相當的人,但在這裏是用碎片的統計資料>解決方法Elasticsearch 5用戶: 捲曲XGET http://localhost:9200/_stats?level=shards

正如你看到的,你必須每指數一些信息,提交和/或您可能使用,看是否改變指數之(或沒有)flushs。

我希望它能幫助別人。

相關問題