Как импортировать данные в Elasticsearch на докере? - PullRequest
0 голосов
/ 17 октября 2018

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

Это содержимое, связанное с Elasticsearch, в файле docker-compose:

elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:5.5.0
    environment:
      - cluster.name=my-docker-cluster
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - xpack.security.enabled=false
      - http.host=0.0.0.0
    ulimits:
      memlock:
        soft: -1
        hard: -1
      nofile:
        soft: 65536
        hard: 65536
    cap_add:
      - IPC_LOCK
    volumes:
      - ./src/elastic:/home
    ports:
      - 9200
      - 9300
    networks:
      - my_network

Эластичный поисковый контейнер запущен и работает.Однако я не знаю, как импортировать данные.

Я узнал IP-адрес контейнера Elasticsearch (указанный как XXX.XX.XX.X ниже) и выполнил следующую команду:

curl -X PUT -H "Content-Type: application/json" -H "Cache-Control: no-cache" -d '{
  "type": "fs",
  "settings": {
    "location": "/home/test/etk_backup/myproject_backup"
  }
}' "http://XXX.XX.XX.X:9200/_snapshot/myproject_backup"

Нополучил эту ошибку:

{"error": {"root_cause": [{"type": "repository_exception", "reason": "[myproject_backup] location [/ home / test / etk_backup /»myproject_backup] не соответствует ни одному из местоположений, указанных в path.repo, поскольку этот параметр пуст "}]

Я вошел в контейнер Elasticsearch и вручную указал path.repo в elasticsearch.yml какследует:

path-repo: ["/home/test/etk_backup/myproject_backup"]

Но получил ту же ошибку.Как я могу решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 17 октября 2018

Чтобы упомянуть удобный инструмент для этого: мы использовали Elasticdump для копирования данных из одного индекса в другой (обычно для разработчиков, чтобы иметь данные в своем локальном индексе).Пока не ясно, поддерживается ли он, но он все еще работает для нас на ES6.3

. Вы бы использовали его так:

$ npm install elasticdump -g
$ elasticdump --input=https://XXX.XX.XX.X:9200/<index> --output /tmp/es-mapping --type=mapping --headers='{"Content-Type": "application/json"}'
$ elasticdump --input=https://XXX.XX.XX.X:9200/<index> --output /tmp/es-data --type=data --headers='{"Content-Type": "application/json"}' [--searchBody '<some query to filter what's being copied>']
$ elasticdump --input /tmp/es-mapping --output https://YYY.YY.YY.Y:9200/<index> --type mapping
$ elasticdump --input /tmp/es-data --output https://YYY.YY.YY.Y:9200/<index> --type data

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

0 голосов
/ 17 октября 2018

Попробуйте вместо этого:

path.repo: ["/home/test/etk_backup/myproject_backup"]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...