2014-12-02 7 views
10

Belirli bir dizin en son ne zaman güncellendiğinde ElasticSearch bilgilerinden alınacak bir yöntem var mı? Amacım, endekste herhangi bir belgenin son eklendiğinde/güncellendiğinde/silindiğinde bunu söylemek. Bu mümkün değilse, daha sonra bu bilgileri sağlayacak dizin değişiklik istekleri ekleyebileceğim bir şey var mı? Ben sorgu daha sonra bir belge yerleştirin ve varsaElasticsearch index son güncelleme zamanı

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

:

cevap

7

Bunu daha kolay bunu saklamak için Elasticsearch ayarlayabilirsiniz zaman damgası dönmek yapmak için _timestamp

gelen değişme zamanını elde edebilirsiniz

: mevcut belgenin güncellenmesi

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 
     } 
    } ] 
    } 
} 

: ben damgası olsun

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

Yeniden çalıştıran önceki sorguyu bana güncelleştirilmiş zaman damgası gösterir: Burada eşdeğeri arayan insanlar varsa

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

Teşekkür ederim Olly. Bunu denedim ve gerçekten de zaman damgası belgeyle birlikte güncellenir. Ancak bu, en son güncellenen belgenin zaman damgasını almak istediğim için ihtiyacım olanın sadece yarısı. Bunu yapmanın kolay bir yolu var mı yoksa sıralanmış zaman damgalı tüm belgeler için bir sorgu yapmalı ve en iyi sonucu almalı mıyım? Ayrıca, bir belge dizinden silinirse, bir şeyin değiştiğini gösteren bir zaman damgası olmayacak, doğru mu? – dchar

+1

Maks _timestamp öğesini döndüren bir toplama yapardım. Belgeye de ihtiyacınız varsa, zaman damgasını kullanan ikinci bir arama yapabilirsiniz. 2. noktasında haklısınız, eğer belge silinirse, onu arayamazsınız. –

+0

Sadece zaman damgasına ihtiyacım var. Maksimum toplama kullanarak bir cazibe gibi çalıştı. Yardımın için teşekkürler! – dchar

0

Bilmiyorum, ama> için kırıkları İstatistikleri kullanarak bir geçici çözüm olduğunu Elasticsearch 5 kullanıcıları: göreceğiniz gibi bukle XGET http://localhost:9200/_stats?level=shards

, sen endeksleri başına bazı bilgiler var taahhüt ve/veya endeks değişti (veya değil) görmek için kullanabileceği flushs.

Umarım birilerine yardım eder.