Подтвердить что ты не робот

Импортировать/индексировать файл 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

Как импортировать файл.json? Есть ли какие-то шаги, которые мне нужно предпринять, чтобы убедиться в правильности сопоставления?

4b9b3361

Ответ 1

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

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

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

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

2019-07-10: Следует отметить, что пользовательские типы сопоставления устарели и не должны использоваться. Я обновил тип в приведенном выше URL-адресе, чтобы было легче увидеть, какой индекс был, а какой тип, поскольку оба имени с именем "test" сбивали с толку.

Ответ 2

Согласно текущим документам, https://www.elastic.co/guide/en/elasticsearch/reference/current/docs-bulk.html:

Если вы предоставляете ввод текстового файла для curl, вы должны использовать - -d атабинарный флаг вместо простого -d. Последний не сохраняет переводы строк.

Пример:

$ curl -s -XPOST localhost:9200/_bulk --data-binary @requests

Ответ 4

Я являюсь автором rubbersearch_loader
Я написал ESL для этой конкретной проблемы.

Вы можете скачать его с помощью pip:

pip install elasticsearch-loader

И тогда вы сможете загрузить файлы json вasticsearch, выполнив:

elasticsearch_loader --index incidents --type incident json file1.json file2.json

Ответ 5

Добавление в ответ KenH

$ curl -s -XPOST localhost:9200/_bulk --data-binary @requests

Вы можете заменить @requests на @complete_path_to_json_file

Примечание: @ важно до пути к файлу

Ответ 6

Я просто убедился, что я нахожусь в том же каталоге, что и файл json, а затем просто запустил этот

curl -s -H "Content-Type: application/json" -XPOST localhost:9200/product/default/_bulk?pretty --data-binary @product.json

Так что, если вы тоже убедитесь, что находитесь в одном каталоге и запустите его таким образом. Примечание: команда product/default/в команде является специфической для моей среды. Вы можете опустить его или заменить тем, что имеет к вам отношение.

Ответ 7

просто получите почтальон из https://www.getpostman.com/docs/environments, чтобы указать местоположение файла с помощью команды /test/test/ 1/_bulk? pretty. введите описание изображения здесь

Ответ 8

Одна вещь, о которой я никого не упоминал, - файл 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"}

Без этого ничего не работает, и он не скажет вам, почему

Ответ 9

Ты используешь

$ 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

Перейдите к обучающим материаламasticsearch (например, к учебнику по Шекспиру) и загрузите используемый образец файла json и посмотрите на него. Перед каждым объектом json (каждой отдельной строкой) есть индексная строка. Это то, что вы ищете после использования команды jq. Этот формат является обязательным для использования массового API, обычные файлы json не будут работать.

Ответ 10

если вы используете 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

Ответ 11

Я написал некоторый код для предоставления API Elasticsearch через API файловой системы.

Это хорошая идея для четкого экспорта/импорта данных, например.

Я создал прототип эластичного привода. Он основан на FUSE

demo