Резервное копирование и восстановление некоторых записей индекса elasticsearch

Я хочу сделать резервную копию некоторых записей (например, только 1 миллион последних записей) индекса Elasticsearch и восстановить эту резервную копию на другой машине. Было бы лучше, если бы это можно было сделать с помощью доступных/встроенных функций 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"
      }
    }'

Формат резервной копии может быть любым, главное, чтобы его можно было успешно восстановить на другом компьютере.

1
0
472
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

вы можете использовать _reinex API. он может принять любой запрос. после переиндексации у вас есть новый индекс в качестве резервной копии, который содержит запрошенные записи. легко скопируйте его куда угодно.

полная информация здесь: https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-reindex.html

Ответ принят как подходящий

В конце концов, я получил необходимые данные с помощью драйвера Python, потому что это то, что я нашел самым простым для данного варианта использования.

Для этого я выполнил запрос Elasticsearch и сохранил его ответ в файле в формате, разделенном новой строкой, а затем восстановил данные из него с помощью другого скрипта Python. Таким образом возвращается максимум 10 000 записей вместе с идентификатором прокрутки, который будет использоваться для получения следующих 10 000 записей и так далее.

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')

Другие вопросы по теме