Я новичок в Elasticsearch и до этого момента вводил данные вручную. Например, я сделал что-то вроде этого:
$ curl -XPUT 'http://localhost:9200/twitter/tweet/1' -d '{
"user" : "kimchy",
"post_date" : "2009-11-15T14:12:12",
"message" : "trying out Elastic Search"
}'
Теперь у меня есть файл .json, и я хочу проиндексировать его в Elasticsearch. Я тоже пробовал что-то подобное, но безуспешно:
curl -XPOST 'http://jfblouvmlxecs01:9200/test/test/1' -d lane.json
Как импортировать файл .json? Что мне нужно сделать в первую очередь, чтобы убедиться в правильности сопоставления?
json
elasticsearch
Шон Роллер
источник
источник
Ответы:
Правильная команда, если вы хотите использовать файл с curl, такова:
curl -XPOST 'http://jfblouvmlxecs01:9200/test/_doc/1' -d @lane.json
Elasticsearch не имеет схемы, поэтому отображение не обязательно. Если вы отправляете json как есть и используете сопоставление по умолчанию, каждое поле будет проиндексировано и проанализировано с помощью стандартного анализатора .
Если вы хотите взаимодействовать с Elasticsearch через командную строку, вы можете взглянуть на elasticshell, который должен быть немного удобнее, чем curl.
2019-07-10: Следует отметить, что настраиваемые типы сопоставления устарели и не должны использоваться. Я обновил тип в URL-адресе выше, чтобы было легче увидеть, какой был индекс, а какой тип, поскольку оба имени "test" сбивали с толку.
источник
jfblouvmlxecs01
сlocalhost
, не так ли?Согласно текущим документам https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html :
Пример:
$ curl -s -XPOST localhost:9200/_bulk --data-binary @requests
источник
Мы сделали небольшой инструмент для таких вещей https://github.com/taskrabbit/elasticsearch-dump
источник
Я автор elasticsearch_loader,
я написал ESL именно для этой проблемы.
Вы можете скачать его с помощью pip:
pip install elasticsearch-loader
И тогда вы сможете загружать файлы json в elasticsearch, выполнив:
elasticsearch_loader --index incidents --type incident json file1.json file2.json
источник
index
строку перед каждым документом.elasticsearch_loader --help
, чтобы просмотреть полное справочное сообщение. Вы можете указать хост: порт с--es-host http://hostname:port
--type
становится избыточным, поскольку Elasticsearch удаляет типы в версии 6 elastic.co/guide/en/elasticsearch/reference/6.0/…Добавление к ответу KenH
$ curl -s -XPOST localhost:9200/_bulk --data-binary @requests
Вы можете заменить
@requests
на@complete_path_to_json_file
Примечание:
@
важно перед путем к файлуисточник
Одна вещь, которую я не видел, чтобы кто-нибудь упоминал: файл JSON должен иметь одну строку, определяющую индекс, которому принадлежит следующая строка, для каждой строки «чистого» файла JSON.
IE
{"index":{"_index":"shakespeare","_type":"act","_id":0}} {"line_id":1,"play_name":"Henry IV","speech_number":"","line_number":"","speaker":"","text_entry":"ACT I"}
Без этого ничего не работает, и он не скажет вам, почему
источник
Я просто убедился, что я нахожусь в том же каталоге, что и файл json, а затем просто запустил этот
curl -s -H "Content-Type: application/json" -XPOST localhost:9200/product/default/_bulk?pretty --data-binary @product.json
Поэтому, если вы тоже, убедитесь, что находитесь в том же каталоге, и запустите его таким образом. Примечание: product / default / в команде относится к моей среде. вы можете опустить его или заменить на то, что вам нужно.
источник
просто получите почтальона с https://www.getpostman.com/docs/environments и укажите ему местоположение файла с помощью команды / test / test / 1 / _bulk? pretty.
источник
Ты используешь
$ curl -s -XPOST localhost:9200/_bulk --data-binary @requests
Если "запросы" - это файл json, вам необходимо изменить его на
$ curl -s -XPOST localhost:9200/_bulk --data-binary @requests.json
Перед этим, если ваш файл json не проиндексирован, вам нужно вставить строку индекса перед каждой строкой внутри файла json. Вы можете сделать это с помощью JQ. См. Ссылку ниже: http://kevinmarsh.com/2014/10/23/using-jq-to-import-json-into-elasticsearch.html
Перейдите к руководствам по elasticsearch (например, к руководству по Шекспиру), загрузите использованный образец файла json и посмотрите его. Перед каждым объектом json (каждой отдельной строкой) есть строка индекса. Это то, что вы ищете после использования команды jq. Этот формат является обязательным для использования массового API, простые файлы json работать не будут.
источник
Начиная с Elasticsearch 7.7, вам также необходимо указать тип контента:
curl -s -H "Content-Type: application/json" -XPOST localhost:9200/_bulk --data-binary @<absolute path to JSON file>
источник
если вы используете в нем VirtualBox и UBUNTU или просто используете UBUNTU, это может быть полезно
wget https://github.com/andrewvc/ee-datasets/archive/master.zip sudo apt-get install unzip (only if unzip module is not installed) unzip master.zip cd ee-datasets java -jar elastic-loader.jar http://localhost:9200 datasets/movie_db.eloader
источник
Я написал код для доступа к API Elasticsearch через API файловой системы.
Это хорошая идея, например, для четкого экспорта / импорта данных.
Я создал прототип эластичного привода . Он основан на FUSE
источник
Если вы используете эластичный поиск версии 7.7 или выше, следуйте приведенной ниже команде.
curl -H "Content-Type: application/json" -XPOST "localhost:9200/bank/_bulk? pretty&refresh" --data-binary @"/Users/waseem.khan/waseem/elastic/account.json"
Указанный выше путь к файлу
/Users/waseem.khan/waseem/elastic/account.json
.Если вы используете эластичный поиск версии 6.x, вы можете использовать команду ниже.
curl -X POST localhost:9200/bank/_bulk?pretty&refresh --data-binary @"/Users/waseem.khan/waseem/elastic/account.json" -H 'Content-Type: application/json'
Примечание : убедитесь, что в вашем .json файле в конце вы добавите одну пустую строку, иначе вы получите исключение ниже.
"error" : { "root_cause" : [ { "type" : "illegal_argument_exception", "reason" : "The bulk request must be terminated by a newline [\n]" } ], "type" : "illegal_argument_exception", "reason" : "The bulk request must be terminated by a newline [\n]" }, `enter code here`"status" : 400
источник