备份和还原Elasticsearch索引的一些记录

时间:2019-05-29 09:45:36

标签: elasticsearch

我希望对Elasticsearch索引的某些记录(例如,仅最新的100万条记录)进行备份,并将此备份恢复到另一台机器上。如果可以使用可用的/内置的Elasticsearch功能来完成此操作会更好。

我已经尝试了Elasticsearch快照和还原(以下代码),但是看起来它需要整个索引的备份,而不是选择性记录。

    curl -H 'Content-Type: application/json'  -X PUT "localhost:9200/_snapshot/es_data_dump?pretty=true" -d '
    {
      "type": "fs",
      "settings": {
        "compress" : true,
        "location": "es_data_dump"
      }
    }'

    curl -H 'Content-Type: application/json'  -X PUT "localhost:9200/_snapshot/es_data_dump/snapshot1?wait_for_completion=true&pretty=true" -d '
    {
      "indices" : "index_name",
      "type": "fs",
      "settings": {
        "compress" : true,
        "location": "es_data_dump"
      }
    }'

备份格式可以是任何格式,只要可以在其他计算机上成功还原即可。

2 个答案:

答案 0 :(得分:0)

您可以使用_reinex API。它可以接受任何查询。重新索引后,您将有一个新索引作为备份,其中包含请求的记录。轻松将其复制到任何您想要的地方。

完整的信息在这里:https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-reindex.html

答案 1 :(得分:0)

最后,我使用python驱动程序提取了所需的数据,因为这是给定用例最简单的方法。

为此,我运行了一个Elasticsearch查询,并将其响应以换行符分隔的格式存储在一个文件中,然后我随后使用另一个python脚本从其中恢复了数据。这样最多可返回10000个条目以及滚动ID,以用于获取下一个10000个条目,依此类推。

es = Elasticsearch(timeout=30, max_retries=10, retry_on_timeout=True)
page = es.search(index=['ct_analytics'], body={'size': 10000, 'query': _query, 'stored_fields': '*'}, scroll='5m')
while len(page['hits']['hits']) > 0:
    es_data = page['hits']['hits'] #Store this as you like
    scrollId = page['_scroll_id']
    page = es.scroll(scroll_id=scrollId, scroll='5m')