2014-12-02 19 views
10

C'è un modo per recuperare dalle informazioni ElasticSearch su quando un indice specifico è stato aggiornato l'ultima volta? Il mio obiettivo è essere in grado di dire quando è stata l'ultima volta che i documenti sono stati inseriti/aggiornati/cancellati nell'indice. Se questo non è possibile, c'è qualcosa che posso aggiungere nelle mie richieste di modifica dell'indice che fornirà queste informazioni in seguito?Indice di elasticsearch l'ora dell'ultimo aggiornamento

risposta

7

È possibile ottenere la data di modifica dal _timestamp

Per rendere più facile per tornare il timestamp è possibile impostare elasticsearch di conservarlo:

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

Se inserisco un documento e quindi query io ottenere il timestamp:

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

aggiornamento del documento esistente:

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

Re-esecuzione della query precedente mi mostra un timestamp aggiornato:

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

Grazie Olly. Ho provato questo e infatti il ​​timestamp viene aggiornato insieme al documento. Ma questa è solo la metà di ciò di cui ho bisogno, dal momento che voglio ottenere il timestamp del documento che è stato aggiornato più di recente. C'è un modo semplice per farlo o devo fare una query per tutti i documenti con data/ora e ottenere il risultato migliore? Inoltre, se un documento viene cancellato dall'indice, non ci sarà il timestamp per indicare che qualcosa è cambiato, corretto? – dchar

+1

Farei un'aggregazione che restituisce il massimo _timestamp. Se è necessario anche il documento, è possibile eseguire una seconda ricerca che utilizza il timestamp. Hai ragione sul secondo punto, se il documento è cancellato non sarai in grado di cercarlo. –

+0

Ho bisogno solo del timestamp. Usando la massima aggregazione ha funzionato come un fascino. Grazie per l'aiuto! – dchar

0

Non so se ci sono persone che sono alla ricerca di un equivalente, ma qui è una soluzione utilizzando cocci statistiche per> elasticsearch 5 utenti: ricciolo XGET http://localhost:9200/_stats?level=shards

Come vedrete, si hanno alcune informazioni per gli indici, impegna e/o di bagliori che si potrebbe utilizzare per vedere se l'indice è cambiato (o non).

Spero che possa aiutare qualcuno.

Problemi correlati