Как массово изменить формат JSON для Elastic Search

У меня есть приведенный ниже формат, и я надеялся выполнить массовую предварительную обработку с помощью elasticsearch.

{"title":"April","url":"https://simple.wikipedia.org/wiki/April", "abstract":"April is the 4th month of the year, and comes between March and May. It is one of four months to have 30 days.","sections":["The Month","April in poetry","Events in April","Fixed Events","Moveable Events","Selection of Historical Events","Trivia","References"]}
{"title":"August","url":"https://simple.wikipedia.org/wiki/August", "abstract":"August (Aug.) is the 8th month of the year in the Gregorian calendar, coming between July and September.","sections":["The Month","August observances","Fixed observances and events","Moveable and Monthlong events","Selection of Historical Events","Trivia","References"]}

Я пытаюсь добавить индекс, ввести строку перед каждой моей строкой.

{"index":{"_index":"myindex","_type":"wiki","_id":"1"}}

При чтении предыдущих сообщений я использую Кевина Пост Марша, как показано ниже:

cat file.json jq -c '.[] | {"index": {"_index": "myindex", "_type": "wiki", "_id": .id}}, .' 

Я не использую канал, так как пытаюсь выяснить предшествовавшую ей ошибку. Я получаю сообщение об ошибке jq: нет такого файла или каталога. Затем я использовал jq --version and get jq-1.5-1-a5b5cbe.

Буду признателен за любую оказанную помощь.


person ESLearner    schedule 17.10.2017    source источник
comment
Не уверен, что вам нужно.   -  person Hatim Stovewala    schedule 17.10.2017
comment
Спасибо, Хатим, я надеялся найти проблему в моем заявлении о кошке или лучшее решение для изменения формата, чтобы он был готов к массовому API с использованием эластичного поиска.   -  person ESLearner    schedule 17.10.2017
comment
Насколько я понимаю, у вас есть файл json, и вы хотите проиндексировать его в Elasticsearch с помощью Bulk API. Верно?   -  person Hatim Stovewala    schedule 17.10.2017
comment
Да, Хатим, и его более 10000 строк, как указано выше, и я хотел бы предварительно обработать файл, добавив {index: {_index:myindex,_type:wiki,_id:1}} перед каждым объектом в файле json.   -  person ESLearner    schedule 17.10.2017
comment
Вам нужно правильно отформатировать свой вопрос, он очень неорганизован   -  person Ibo    schedule 17.10.2017
comment
Я сделал форматирование вопроса @Ibo.   -  person Hatim Stovewala    schedule 17.10.2017


Ответы (2)


Ну вот. Это сработало для меня. Позвольте мне знать, если это помогает.

cat data.json | jq -c '. | {"index": {"_index": "json", "_type": "json"}}, .'  | curl -XPOST localhost:9200/_bulk --data-binary @-

Узнайте больше о jq : легком и гибком процессоре JSON из командной строки.

person Hatim Stovewala    schedule 17.10.2017
comment
Будет абсолютно отформатирован в будущем. Прости за это. Хатим использовал следующую команду в указанном вами формате: - person ESLearner; 18.10.2017
comment
данные кота.json | jq-с'. | {индекс: {_индекс: json, _type: json}}, .' | curl -XPOST localhost:9200/_bulk --data-binary @- Я получаю следующую ошибку: jq: ошибка: синтаксическая ошибка, неожиданный $end (проблемы с цитированием оболочки unix) на ‹верхнем уровне›, строка 1 - person ESLearner; 18.10.2017
comment
Забудьте о завитке. Попробуйте этот кот data.json | jq-с'. | {индекс: {_индекс: json, _type: json}}, .' и посмотрите, какой результат вы получите. - person Hatim Stovewala; 18.10.2017
comment
Хатим - Ты гений! Вы заставили меня задуматься о том, что я делаю неправильно, я сохранил исходный формат и выполнил первые 10 строк, и он успешно их извлек. Я пошел головой и создал индекс. Что я делаю сейчас, так это запускаю команду для 1000 нечетных строк, которые у меня есть. Кажется, они медленно работают над ними ... опубликую и сообщу вам ... Благодарю за всю вашу помощь ... - person ESLearner; 18.10.2017
comment
Хммм, получил ошибку после того, как команда обработала около 20К строк. Ошибка: curl: (56) Ошибка получения: сброс соединения одноранговым узлом - person ESLearner; 18.10.2017

Мы обнаружили, что необходимо указать Content-Type в заголовке curl; предлагаемое решение должно иметь вид:

cat data.json | jq -c '. | {"index": {"_index": "json", "_type": "json"}}, .' | curl -H "Content-Type: application/json" -XPOST localhost:9200/_bulk --data-binary @-

person John S. Erickson    schedule 22.10.2018