有没有办法从ElasticSearch信息中检索上次更新特定索引的时间? 我的目标是能够告诉最后一次在索引中插入/更新/删除任何文档的时间。如果这是不可能的,我可以在索引修改请求中添加一些内容,以便稍后提供此信息吗?
答案 0 :(得分:8)
您可以从_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
}
答案 1 :(得分:1)
我不知道是否有人在寻找等价物,但这里有一个解决方法,使用分析统计数据> Elasticsearch 5用户: 卷曲XGET http://localhost:9200/_stats?level=shards
正如您所看到的,您可以使用每个索引,提交和/或刷新的一些信息来查看指标是否发生了变化。
我希望它会帮助别人。
答案 2 :(得分:-1)
刚刚研究了这个问题的解决方案。最近的 Elasticsearch 版本具有 <index>/_recovery
API。
这将返回一个分片列表和一个名为 stop_time_in_millis
的字段,它看起来像是最后一次写入该分片的时间戳。