Импорт / индексирование JSON-файла в Elasticsearch
Я новичок в 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
Как импортировать a .файл json? Есть ли шаги, которые мне нужно предпринять в первую очередь, чтобы убедиться, что сопоставление правильно?
10 ответов:
правильная команда, если вы хотите использовать файл с curl это:
curl -XPOST 'http://jfblouvmlxecs01:9200/test/test/1' -d @lane.jsonElasticsearch не имеет схем, поэтому вам не обязательно нужно сопоставление. Если вы отправляете json как есть и используете сопоставление по умолчанию, каждое поле будет индексироваться и анализироваться с помощью стандартный анализатор.
Если вы хотите взаимодействовать с Elasticsearch через командную строку, вы можете взглянуть на elasticshell который должен быть a немного удобнее, чем завиток.
в текущих документах,http://www.elasticsearch.org/guide/en/elasticsearch/reference/current/docs-bulk.html:
Если вы предоставляете ввод текстового файла для curl, вы должны использовать --data-binary флаг вместо plain-d. последний не сохраняет новые строки.
пример:
$ curl -s -XPOST localhost:9200/_bulk --data-binary @requests
мы сделали небольшой инструмент для этого типа вещей https://github.com/taskrabbit/elasticsearch-dump
добавление к ответу Кена
$ curl -s -XPOST localhost:9200/_bulk --data-binary @requestsвы можете заменить
@requestsС@complete_path_to_json_fileПримечание:
@важно перед путем к файлу
просто получить почтальон от https://www.getpostman.com/docs/environments дайте ему расположение файла с /test/test/1 / _bulk?симпатичная команда.
вы используете
$ 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. Этот формат является обязательным для использования bulk API, простые файлы json не будут работать.
Я автор elasticsearch_loader
Я написал ESL для этой точной проблемы.Вы можете скачать его с Pip:
pip install elasticsearch-loaderи тогда вы сможете загрузить файлы json в elasticsearch, выдав:
elasticsearch_loader --index incidents --type incident json file1.json file2.json
одна вещь, которую я не видел, чтобы кто-то упоминал: файл JSON должен иметь одну строку, указывающую индекс, к которому принадлежит следующая строка, для каждой строки "чистого" файла JSON.
То Есть
{"index":{"_index":"shakespeare","_type":"act","_id":0}} {"line_id":1,"play_name":"Henry IV","speech_number":"","line_number":"","speaker":"","text_entry":"ACT I"}без этого ничего не работает, и он не скажет вам, почему
Если вы используете 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
Я просто убедился, что я нахожусь в том же каталоге, что и файл json, а затем просто запустил это
curl -s -H "Content-Type: application/json" -XPOST localhost:9200/product/default/_bulk?pretty --data-binary @product.jsonТак что если вы тоже убедитесь, что вы находитесь в том же каталоге и запустить его таким образом. Примечание: продукт / по умолчанию / в команде-это что-то конкретное для моей среды. вы можете опустить его или заменить тем, что имеет отношение к вам.

Comments