Я хочу сделать резервную копию некоторых записей (например, только последние 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
Sagar Gupta 29 Май 2019 в 12:45

2 ответа

Лучший ответ

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

Для этого я запустил запрос Elasticsearch и сохранил его ответ в файле в формате новой строки, а затем восстановил данные из него, используя другой скрипт на python. Таким образом, возвращается максимум 10000 записей вместе с идентификатором прокрутки, который будет использоваться для получения следующих 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')
0
Sagar Gupta 5 Авг 2019 в 08:52

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

Полная информация находится здесь: https: //www.elastic .co / гид / а / elasticsearch / ссылка / текущие / документы - reindex.html

1
hamid bayat 29 Май 2019 в 10:28