Импорт / индексирование 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? Есть ли шаги, которые мне нужно предпринять в первую очередь, чтобы убедиться, что сопоставление правильно?

980   10  

10 ответов:

правильная команда, если вы хотите использовать файл с curl это:

curl -XPOST 'http://jfblouvmlxecs01:9200/test/test/1' -d @lane.json

Elasticsearch не имеет схем, поэтому вам не обязательно нужно сопоставление. Если вы отправляете 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?симпатичная команда. enter image description here

вы используете

$ 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

    Ничего не найдено.